问题描述
需要了解lockData的所有三个流是否都在一个事务中。当流程返回到类 A1 时,我可以看到表职员上的类 C1 添加的行锁吗?
当前的流为:A1
的实例调用B1
的实例,而该实例又依次调用C1
的实例
class A1 {
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void lockData(){
B1 classBObj = ctx.getBean("B1");
boolean locked = classBObj.lockData();
//Check if lock on employee table is still there.
}
}
class B1 {
@Transactional(propagation = Propagation.required)
public void lockData(){
C1 classCObj = ctx.getBean("C1");
classCObj.lockData();
return true;
}
}
class C1 {
public void lockData(){
executeQuery("select * from employee where emp_id=1 for update");
return true;
}
}
解决方法
如果使用的A1
实例是spring-bean并通过spring bean上下文注入,则可以,对a1.lockData()
的调用(及其所有嵌套调用)将在一个事务中执行。
出于完整性考虑,我建议用C1:lockData
注释@Transactional(propagation = Propagation.REQUIRED)
。