hibernate对oracle并发,如何使Hibernate @Lock注释对Oracle DB有效?

小编典典

你之前这么说:

锁定的目的是防止一个以上的事务从DB读取数据,因为该数据会影响新数据的生成并在事务方面发生更改。

Oracle使用MVCC(多版本并发控制),因此读者不会阻止Writers,而作家也不会阻止Reader。即使您使用Oracle获得了行级锁,并且在不提交的情况下修改了该行,其他事务仍可以读取上次提交的值。

与此日志消息相关:

org.hibernate.loader.Loader - HHH000444: Encountered request for locking however dialect reports that database prefers locking be done in a separate select (follow-on locking); results will be locked after initial query executes

在后续锁定机制是由于甲骨文不能够做的Oracle 11g分页时,使用应用锁DISTINCT或UNION ALL。

如果您使用的是Oracle 12i,则可以将Hibernate方言更新为,Oracle12cDialect并且分页和锁定将正常工作,因为Oracle

12使用SQL标准分页并且不再需要派生表查询。

这在MariaDB或任何其他数据库中不会发生。这只是Oracle 12之前的限制。

如果您使用的是Hibernate

5.2.1,我们添加了一个新的提示HINT_FOLLOW_ON_LOCKING来禁用此机制。

因此,您的Spring Data查询变为:

@QueryHints(value = { @QueryHint(name = "

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值