我们对hibernate的表演有问题 INSERT 查询而不是 UPDATE . 我们并行运行两个长期事务,修改同一个表。当事务运行时,我们使用 entityManager.merge() ,但最后只能刷新到数据库,就在提交之前。 事务处理a 提交成功。几分钟后,什么时候 事务处理b ConstraintViolationException 因为在公共表中有重复的键。 我们假设当 事务处理b 合并, 还没有承诺 然而 ,实体尚未写入数据库,因此 插入 提交之前 事务处理b 并将实体插入到数据库中,因此此时我们需要在中更改查询 事务处理b 更新。 有什么建议吗?
INSERT
UPDATE
entityManager.merge()
ConstraintViolationException
插入
由于您使用的是Hibernate而不是纯JPA,因此可以使用 Session#saveOrUpdate . 您可以使用访问Hibernate会话 Session session = entityManager.unwrap(Session.class);
Session#saveOrUpdate
Session session = entityManager.unwrap(Session.class);