【发布时间】:2014-11-21 09:05:18
【问题描述】:
在下面的代码中,当从 methodOuter 中调用 methodInner() 时,应该在事务范围内。但事实并非如此。 但是当 methodInner() 直接从 MyController 类调用时,它是被事务绑定的。有什么解释吗?
这是控制器类。
@Controller
public class MyController {
@Autowired
@Qualifier("abcService")
private MyService serviceObj;
public void anymethod() {
// below call cause exception from methodInner as no transaction exists
serviceObj.methodOuter();
}
}
这是服务类。
@Service("abcService")
public class MyService {
public void methodOuter() {
methodInner();
}
@Transactional
public void methodInner() {
.....
//does db operation.
.....
}
}
【问题讨论】:
-
您是否已将@EnableTransactionManagement 添加到您的配置中?
-
按预期工作,因为这是代理的工作方式,仅拦截外部方法调用(即调用 INTO 对象),不拦截来自对象内部的调用。
-
stackoverflow.com/a/24902434/2504224 将
@Async替换为@Transactional,实际上您就有了答案 -
@Ludwig Magnusson :不,我没有使用 EnableTransactionManagement 。但我已将
放在 xml 配置文件中。我希望这就足够了。 Spring 能够在事务边界下执行其他方法。仅对于这种特殊情况,它不起作用。
标签: java spring spring-mvc spring-transactions