【发布时间】:2011-05-29 01:49:16
【问题描述】:
我有一个具有唯一列“令牌”的表,由数据库中的唯一约束强制执行。在某些情况下,我需要将现有行更改为与另一个现有行具有相同的标记,将第二行更改为具有新值。
所以,假设我有:
id;令牌 0;'aaa' 1;'bbb'
我希望 id 0 ('aaa') 具有令牌'bbb'。所以我需要把'bbb'改成'jfeisefjse',然后我可以把'aaa'改成'bbb'。这可以在 postgres 中一次完成。
我尝试在代码中做同样的事情:在一个事务中,我从现有行(第 1 行)获取令牌,我将其设置为随机值,我将另一行(第 0 行)更新为有第 1 行的令牌,然后我提交。但是hibernate不尊重我提交的顺序。它似乎总是首先运行第0行的更新语句,并且postgres抱怨它违反了外键约束。
我怎样才能让休眠做到这一点?要么强制更新语句的特定顺序,要么以其他方式执行此操作?
注意:不能在两个事务中执行此操作(一个用于加扰第 1 行,然后另一个事务用于更新第 0 行)。
【问题讨论】:
标签: java hibernate postgresql