1

Hibernate 是否可以在 Java 事务开始时实现悲观锁定,或者它是否依赖于在 Java 领域中的所有工作完成后应用悲观锁定,然后将更改作为数据库事务的一部分应用于数据库?

我问,因为我有一个 Java 事务,在此过程中调用了远程 Web 服务,这是非事务性的,因此无法回滚。如果 Hibernate 对正在操作的数据持有悲观锁,那么事务的处理应该被阻塞,因为 Hibernate 知道另一个线程已经在对这些数据进行操作。如果 Hibernate本身不跟踪此类锁,则 Java 事务将继续,调用 Web 服务,然后阻塞 DB 提交。

我真正想要发生的是Java事务启动,另一个线程尝试启动另一个事务,并且阻塞/失败,因为相关数据已经在进行中。

当 Hibernate 将 EHCache 作为 2LC 以分布式方式与 Terracotta 一起使用时,锁定行为会受到怎样的影响?

4

2 回答 2

3

Hibernate 悲观锁是数据库锁。锁定被委托给数据库。二级缓存与它无关。

于 2011-11-28T09:44:27.403 回答
0

“休眠不会将对象锁定在内存中。”

http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/transactions.html

一点也不像 RTFM :)

于 2011-11-28T12:09:43.277 回答