【发布时间】:2019-07-28 14:37:02
【问题描述】:
我们在执行 INSERT 查询而不是 UPDATE 时遇到问题。
背景:我们正在并行运行两个长期事务,正在修改同一张桌子。在事务运行时,我们使用entityManager.merge(),但最后只刷新到数据库,就在提交之前。
因此,transaction a 提交成功。几分钟后,当 transaction b 尝试刷新时,由于公共表中有重复键而导致 ConstraintViolationException 失败。
我们假设当 transaction b 合并时,transaction a 尚未提交,实体尚未写入数据库,因此INSERT 查询已创建。但是,transaction a 在 transaction b 之前提交并将实体插入 DB,所以此时我们需要更改 transaction b 中的查询更新。
有什么建议吗?
【问题讨论】: