首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >默认情况下Hibernate中的乐观锁定

问默认情况下Hibernate中的乐观锁定
EN

Stack Overflow用户
提问于 2012-04-12 16:10:14
回答 2查看 20.4K关注 0票数 20

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

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

非常感谢您的关注。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-12 16:26:34

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

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

票数 47
EN

Stack Overflow用户

发布于 2015-02-01 06:53:14

@axtavt,你是对的,但是质疑hibernate如何在没有@Version列的情况下实现乐观锁定。

目前有四种OptimisticLockType选项可供选择:

代码语言:javascript
复制
/**
 * 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

我认为这足以回答原来的问题。

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

https://stackoverflow.com/questions/10119787

复制
相关文章

相似问题

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