控制hibernate中的更新顺序

时间:2011-05-29 01:49:16

标签: java hibernate postgresql

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

所以,说我有:

ID;令牌 0; 'AAA' 1; 'BBB'

我希望id 0('aaa')代替令牌'bbb'。因此我需要将'bbb'改为'jfeisefjse',然后我可以将'aaa'改为'bbb'。这可以在postgres中以单一的方式完成。

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

如何让hibernate这样做?是强制某个更新语句的顺序,还是以其他方式执行此操作?

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

1 个答案:

答案 0 :(得分:5)

Session.flush()将强制hibernate写入任何挂起的SQL而不提交事务。这有点笨拙,但有时候你需要少点“ORM”并让事情变得有效:)