【问题标题】:Control order of updates in hibernate控制休眠中的更新顺序
【发布时间】: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


    【解决方案1】:

    Session.flush() 将强制休眠在不提交事务的情况下写入任何挂起的 SQL。这有点笨拙,但有时你确实需要少一点“ORM”,让事情正常工作:)

    【讨论】:

    • 谢谢,它有效。这比我想到的备份要好:编写原始 sql 来执行此操作并让 hibernate 执行该操作以按正确的顺序进行更新。谢谢
    • 警告:hibernate 会在需要时忽略flush()。它不以任何方式、形式或形式保证 SQL 将在您希望的时候运行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-02
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多