Java hibernate中更新的控制顺序

Java hibernate中更新的控制顺序,java,hibernate,postgresql,Java,Hibernate,Postgresql,我有一个具有唯一列“token”的表,该列由数据库中的唯一约束强制执行。在某种情况下,我需要更改一个现有行,使其具有与另一个现有行相同的标记,将第二行更改为具有新值 所以,假设我有: 身份证;代币 0;'aaa' 1;'bbb' 我希望id 0(“aaa”)改为标记“bbb”。所以我需要将“bbb”改为“jfeisefjse”,然后我可以将“aaa”改为“bbb”。这可以在一次培训中完成 我尝试在代码中做同样的事情:在一个事务中,我从现有行(第1行)获取令牌,将其设置为随机值,更新另一行(第0行

我有一个具有唯一列“token”的表,该列由数据库中的唯一约束强制执行。在某种情况下,我需要更改一个现有行,使其具有与另一个现有行相同的标记,将第二行更改为具有新值

所以,假设我有:

身份证;代币 0;'aaa' 1;'bbb'

我希望id 0(“aaa”)改为标记“bbb”。所以我需要将“bbb”改为“jfeisefjse”,然后我可以将“aaa”改为“bbb”。这可以在一次培训中完成

我尝试在代码中做同样的事情:在一个事务中,我从现有行(第1行)获取令牌,将其设置为随机值,更新另一行(第0行)以获得第1行的令牌,然后提交。但是,hibernate不尊重我提交的顺序。它似乎总是先运行第0行的update语句,postgres抱怨它违反了外键约束

我如何让hibernate这样做?要么强制更新语句的特定顺序,要么以其他方式执行


注意:在两个事务中执行此操作(一个用于置乱第1行,然后另一个用于更新第0行的事务)不是一个选项。

Session.flush()
将强制hibernate在不提交事务的情况下写入任何挂起的SQL。它有点笨重,但有时你确实需要少一点“ORM”,让事情顺利进行:)

谢谢,它很有效。这比作为备份的想法要好:编写原始sql并让hibernate以正确的顺序执行更新。感谢:hibernate会在任何时候忽略flush()。它不能以任何方式、形状或形式保证SQL在需要时运行。