关于Hibernate中的乐观锁定,我有一个问题。我试图深入了解Hibernate的乐观锁定,但我有一个疑问。Hibernate使用版本方法(整数或时间戳)来实现乐观锁定。要进行配置,您可以使用@Version注释(或xml配置)并创建一个版本属性。另一种选择是不使用乐观锁=“all”属性进行版本控制的配置。
我的问题是,如果您没有定义任何版本控制属性,也没有指定乐观锁属性,在这种情况下,哪种策略使用Hibernate?Pessimistc锁我很确定不是,所以我认为这是乐观的锁,但不知道怎么做。
非常感谢您的关注。
发布于 2012-04-12 16:26:34
如果您不将Hibernate配置为使用乐观锁定,它将根本不使用锁定。因此,在这种情况下,最后一次更新总是获胜。
为了清楚起见,请注意Hibernate乐观锁定与DBMS事务隔离完全不同。Hibernate乐观锁定仅在您在一个事务中加载对象、修改它并稍后将其保存在另一个事务中的情况下才有效。在这种情况下,乐观锁定可以确保其他事务在两者之间不会更改数据库中对象。但是,乐观锁不会影响并发事务的隔离-因此,DBMS内部用于实现事务隔离的锁(乐观锁或悲观锁)仍然有效,无论是否启用了Hibernate锁。
发布于 2015-02-01 06:53:14
@axtavt,你是对的,但是质疑hibernate如何在没有@Version列的情况下实现乐观锁定。
目前有四种OptimisticLockType选项可供选择:
/**
* Perform no optimistic locking.
*/
NONE,
/**
* Perform optimistic locking using a dedicated version column.
*
* @see javax.persistence.Version
*/
VERSION,
/**
* Perform optimistic locking based on *dirty* fields as part of an expanded WHERE clause restriction for the
* UPDATE/DELETE SQL statement.
*/
DIRTY,
/**
* Perform optimistic locking based on *all* fields as part of an expanded WHERE clause restriction for the
* UPDATE/DELETE SQL statement.
*/
ALL我认为这足以回答原来的问题。
https://stackoverflow.com/questions/10119787
复制相似问题