【问题标题】:How to change hibernate query from insert to update before commit如何在提交前将休眠查询从插入更改为更新
【发布时间】:2019-07-28 14:37:02
【问题描述】:

我们在执行 INSERT 查询而不是 UPDATE 时遇到问题。

背景:我们正在并行运行两个长期事务,正在修改同一张桌子。在事务运行时,我们使用entityManager.merge(),但最后只刷新到数据库,就在提交之前。
因此,transaction a 提交成功。几分钟后,当 transaction b 尝试刷新时,由于公共表中有重复键而导致 ConstraintViolationException 失败。
我们假设当 transaction b 合并时,transaction a 尚未提交,实体尚未写入数据库,因此INSERT 查询已创建。但是,transaction atransaction b 之前提交并将实体插入 DB,所以此时我们需要更改 transaction b 中的查询更新。

有什么建议吗?

【问题讨论】:

    标签: java hibernate


    【解决方案1】:

    由于您使用的是 Hibernate 而不是纯 JPA,因此您可以使用 Session#saveOrUpdate。您可以通过 Session session = entityManager.unwrap(Session.class); 访问 Hibernate 会话

    【讨论】:

    • 谢谢,但我想那是什么合并,不是吗?
    • 它们的行为略有不同。要使merge 工作,entityManager 需要知道该对象存在。它不会先检查数据库。作为使用 Hibernate 会话的替代方法,请参阅以下答案:stackoverflow.com/a/36241661/1245752
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多