我有两个hibernate实体: Order及其条目(一对多的保存更新级联,没有什么特别的)。
两个用户通过同时添加一个新项来启动相同顺序的更新,这将在两个并发线程中触发Session.saveOrUpdate( Order )操作。
Order和Item都有@Version列来支持乐观锁,因此这个并发编辑在OptimisticLockException中失败了。
然后,我希望提高数据库的一致性,并为项添加一个唯一的约束(在其某一列上)。
重复上面的情况,我得到约束违反,而不是OptimisticLockException!
看来hibernate是这样做的:
可以强制Hibernate在插入子项之前检查乐观锁吗?
发布于 2014-02-13 09:26:13
无法更改插入/更新顺序。Hibernate有操作队列,其中INSERT总是在任何更新之前。
详细信息在org.hibernate.engine.spi.ActionQueue.executeActions方法中。解决上述问题的唯一方法是删除级联保存:更新父实体,然后添加子项。
发布于 2014-02-08 11:30:03
对于使用版本控制的并发更新,我们可以捕获乐观锁异常(JPA)或StaleObjectStateException,并根据用例处理相同的更新。我们可以重新加载最新的实体并保存它,或者为用户操作重定向。
https://stackoverflow.com/questions/21602762
复制相似问题