我想知道事务和锁之间的关系。
更具体地说,Spring 的情况如何?@Transactional
与Hibernate的LockMode有关。https://docs.jboss.org/hibernate/orm/4.0/devguide/en-US/html/ch05.html https://docs.jboss.org/hibernate/orm/4.0/devguide/en-US/html/ch05.html.
http://docs.spring.io/autorepo/docs/spring/4.2.x/spring-framework-reference/html/transaction.html http://docs.spring.io/autorepo/docs/spring/4.2.x/spring-framework-reference/html/transaction.html
如果我在创建会话对象时没有指定任何锁,并使用@Transactional
with readOnly
as false
,我是否使用悲观并发控制?
如果有人能告诉我(乐观/悲观)并发控制和事务之间的关系,那将是一个很大的帮助。
谢谢你,
维韦克
没有direct之间的关系@Transactional
and @LockMode
注释。
@Transactional https://vladmihalcea.com/a-beginners-guide-to-transaction-isolation-levels-in-enterprise-java/用于标记 RESOURCE_LOCAL 或 JTA 事务的显式边界。您需要它的原因是每个数据库语句都在事务上下文中执行,如果您不设置事务边界,您将获得每个语句一个事务或自动提交。
另一方面,@LockModeType
用于设置显式锁定选项。如果不设置它,将使用隐式锁定机制:
- 2PL 和 MVCC 数据库引擎上的每个修改行都会获取隐式锁。如果您在可串行化上使用可重复读取,则会在 2PL 引擎上的读取记录上获取共享锁。
- 如果您定义了一个@Version https://vladmihalcea.com/optimistic-locking-version-property-jpa-hibernate/财产,implicit将使用乐观锁定机制。
So, @LockModeType
用于设置锁定选项明确地,您可以有以下选项:
- LockModeType.PESSIMISTIC_READ https://vladmihalcea.com/hibernate-locking-patterns-how-do-pessimistic_read-and-pessimistic_write-work/
- LockModeType.PESSIMISTIC_WRITE https://vladmihalcea.com//hibernate-locking-patterns-how-do-pessimistic_read-and-pessimistic_write-work/
The PESSIMISTIC
锁定模式将始终获取与锁定实体关联的表行上的数据库锁。
还有显式的乐观锁策略:
- LockModeType.OPTIMISTIC https://vladmihalcea.com/hibernate-locking-patterns-how-does-optimistic-lock-mode-work/
- LockModeType.OPTIMISTIC_FORCE_INCREMENT https://vladmihalcea.com/hibernate-locking-patterns-how-does-optimistic_force_increment-lock-mode-work/
- LockModeType.PESSIMISTIC_FORCE_INCREMENT https://vladmihalcea.com/hibernate-locking-patterns-how-does-pessimistic_force_increment-lock-mode-work/
The OPTIMISTIC
锁定模式旨在为您提供一种提高实体版本的方法,即使实体在当前运行的持久性上下文中没有更改。当您需要使用父实体版本协调多个子实体时,这是一个非常有用的机制。
我在这个答案中提供的链接中有很多示例,因此请花点时间阅读所有这些示例,您将更详细地理解所有这些概念。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)