JPA 嵌套事务和锁定
考虑两种方法存在于不同无状态Bean中的场景
public class Bean_A {
Bean_B beanB; // Injected or whatever
public void methodA() {
Entity e1 = // get from db
e1.setName("Blah");
entityManager.persist(e1);
int age = beanB.methodB();
}
}
public class Bean_B {
//Note transaction
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
public void methodB() {
// complex calc to calculate age
}
}
由 BeanA.methodA 启动的事务将被暂停,新事务将在 BeanB.methodB 中启动。如果方法 B 需要访问由方法 A 修改的同一实体,该怎么办?这将导致死锁。是否可以在不依赖隔离级别的情况下防止它?