有了这个示例代码:
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);
}
}
这里是我想要实现的目标:
- 只有在
processItem(anItem);
内部发生异常时才会回滚。 - 如果出现异常,
myTransactionalMethod
应该继续执行,这意味着for-each应该结束。 - 如果
myTransactionalMethod
内部发生异常但不是在processItem(anItem)
中,myTransactionalMethod
应该完全回滚。
编辑:我正在考虑使用
@Transactional(PROPAGATION=REQUIRES_NEW)
,不知道它是否适用于同一个bean内。