dan*_*rba 3 java spring hibernate transactional
鉴于此示例代码:
public class MyServiceImpl implements MyService {
@Transactional
public void myTransactionalMethod() {
List<Item> itemList = itemService.findItems();
for (Item anItem : itemList) {
try {
processItem(anItem);
catch (Exception e) {
// dont rollback here
// rollback just one item
}
}
}
@Transactional
public void processItem(Item anItem) {
anItem.setSomething(new Something);
anItem.applyBehaviour();
itemService.save(anItem);
}
}
Run Code Online (Sandbox Code Playgroud)
这是我想要实现的目标:
processItem(anItem);在其中发生异常时才应回滚.myTransactionalMethod应该继续,这意味着for-each应该结束.myTransactionalMethod但不在内processItem(anItem),myTransactionalMethod则应完全回滚.是否存在不涉及手动管理事务(没有注释)的解决方案?
编辑:我正在考虑使用@Transactional(PROPAGATION=REQUIRES_NEW),不知道它是否会在同一个bean中工作.
这是一种常见的误解.Spring事务通过代理实现.代理是你班级的包装.您正在processItem从同一个类访问该方法,即您没有通过代理,因此您不会获得任何事务.几年前我在这个答案中解释了这个机制.
解决方案:如果需要嵌套事务,则需要两个单独的Spring bean,它们都必须由代理进行代理@Transactional.
| 归档时间: |
|
| 查看次数: |
1037 次 |
| 最近记录: |