首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Hibernate一对多sql执行顺序

Hibernate一对多sql执行顺序
EN

Stack Overflow用户
提问于 2014-02-06 12:18:04
回答 2查看 336关注 0票数 0

我有两个hibernate实体: Order及其条目(一对多的保存更新级联,没有什么特别的)。

两个用户通过同时添加一个新项来启动相同顺序的更新,这将在两个并发线程中触发Session.saveOrUpdate( Order )操作。

Order和Item都有@Version列来支持乐观锁,因此这个并发编辑在OptimisticLockException中失败了。

然后,我希望提高数据库的一致性,并为项添加一个唯一的约束(在其某一列上)。

重复上面的情况,我得到约束违反,而不是OptimisticLockException!

看来hibernate是这样做的:

  • 在item表中插入新项(约束退出!)
  • 检查乐观锁
  • 更新顺序表

可以强制Hibernate在插入子项之前检查乐观锁吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-13 09:26:13

无法更改插入/更新顺序。Hibernate有操作队列,其中INSERT总是在任何更新之前。

详细信息在org.hibernate.engine.spi.ActionQueue.executeActions方法中。解决上述问题的唯一方法是删除级联保存:更新父实体,然后添加子项。

票数 0
EN

Stack Overflow用户

发布于 2014-02-08 11:30:03

对于使用版本控制的并发更新,我们可以捕获乐观锁异常(JPA)或StaleObjectStateException,并根据用例处理相同的更新。我们可以重新加载最新的实体并保存它,或者为用户操作重定向。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21602762

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档