一尘不染

默认情况下在乐观休眠中

hibernate

我有一个关于乐观锁定Hibernate的问题。我试图深入了解Hibernate的乐观锁定,但是我有一个疑问。Hibernate使用版本方法(整数或时间戳)来实现乐观锁定。要进行配置,您可以使用@Version批注(或xml配置)并创建一个version属性。另一个选项是使用optimistic-
lock =“ all”属性进行配置而不进行版本控制。

我的问题是,如果您没有定义任何版本控制属性,也没有指定乐观锁定属性,那么在这种情况下哪种策略使用了Hibernate?悲观锁我很确定不会,所以我想那是乐观锁,但不知道如何。

非常感谢您的关注。


阅读 209

收藏
2020-06-20

共1个答案

一尘不染

如果您没有将Hibernate配置为使用乐观锁定,则它根本不使用锁定。因此,在这种情况下,最后的更新总是胜出。

为了清楚起见,请注意,Hibernate乐观锁定与DBMS事务隔离完全不同。当您在一个事务中加载对象,对其进行修改并在以后将其保存到另一事务中时,hibernate乐观锁定仅在以下情况下起作用。在这种情况下,乐观锁定可确保其他事务在两者之间没有更改该对象。但是,乐观锁定不会影响并发事务的隔离-
因此,无论是否启用了Hibernate锁定,DBMS内部用于实现事务隔离的锁定(乐观或悲观)仍然有效。

2020-06-20