控制hibernate中的更新顺序

Joh*_*ith 6 java postgresql hibernate

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

所以,说我有:

id;标记0;'aaa'1;'bbb'

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

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

我如何让hibernate这样做?要么强制执行某个更新语句,还是用其他方式执行此操作?

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

Aff*_*ffe 6

Session.flush()将强制hibernate写入任何挂起的SQL而不提交事务.它有点笨拙,但有时你需要少一些'ORM'并使事情正常工作:)