Hibernate可以在Java事务开始时实现悲观锁定,还是依赖于在Java领域中完成所有工作时应用的悲观锁定,然后将更改作为一部分应用于数据库数据库事务?
我问,因为我有一个Java事务,在一半时间内调用远程Web服务,这是非事务性的,因此无法回滚。如果Hibernate对正在执行的数据持有悲观锁定,则应该阻止事务处理,因为Hibernate知道另一个线程已经在对这些数据进行操作。如果Hibernate 不跟踪这些锁本身,那么Java事务将继续,调用web服务,然后阻止数据库提交。
我真正想要的是Java事务启动,另一个线程尝试启动另一个事务,阻塞/失败,因为已经有一个正在进行相关数据。
当Hibernate使用Terracotta以分布式方式将EHCache用作2LC时,锁定行为如何受到影响?
答案 0 :(得分:2)
Hibernate悲观锁是数据库锁。锁定被委托给数据库。二级缓存与它无关。
答案 1 :(得分:0)
“Hibernate不会锁定内存中的对象。”
http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/transactions.html
没有什么比RTFM更好:)