mys*_*mic 2 java spring hibernate optimistic-locking
我有一个这样的方法:
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void doSomeWork(){
Entity = entity = dao.loadEntity();
// do some related work
...
try {
dao.saveEntity(entity);
}
catch(StaleObjectStateException sose){
dao.flush(entity);
doSomeWork();
}
}
Run Code Online (Sandbox Code Playgroud)
我期望通过使用 REQUIRES_NEW 事务传播和显示的递归,StaleObjectStateException 最终会清除,但事实并非如此。
我如何从这个异常中恢复?
原来有一点我忽略了的'gatcha'......
来自 spring 文档
在代理模式下(默认),只有通过代理进入的“外部”方法调用才会被拦截。这意味着“自调用”,即目标对象中的一个方法调用目标对象的其他方法,即使被调用的方法用@Transactional 标记,也不会在运行时导致实际的事务!
因为我一直在内部递归,所以没有应用事务划分。
解决方案是通过代理递归,就像这样......
@Autowired
private ApplicationContext applicationContext;
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void doSomeWork(){
Entity = entity = dao.loadEntity();
// do some related work
...
try {
dao.saveEntity(entity);
}
catch(StaleObjectStateException sose){
dao.flush(entity);
applicationContext.getBean(this.getClass()).doSomeWork();
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
8087 次 |
最近记录: |