java – Hibernate / Spring – 在事务中回滚事务
发布时间:2020-12-15 04:31:23 所属栏目:Java 来源:网络整理
导读:鉴于此示例代码: public class MyServiceImpl implements MyService { @Transactional public void myTransactionalMethod() { ListItem itemList = itemService.findItems(); for (Item anItem : itemList) { try { processItem(anItem); catch (Exception
鉴于此示例代码:
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);如果在其中发生异常,则应该回滚. 是否存在不涉及手动管理事务(没有注释)的解决方案? 编辑:我正在考虑使用@Transactional(PROPAGATION = REQUIRES_NEW),但不知道它是否可以在同一个bean中工作. 解决方法
这是一种常见的误解. Spring事务通过代理实现.代理是你班级的包装.您正在从同一个类访问processItem方法,即您没有通过代理,因此您不会获得任何事务.几年前
I explained the mechanism in this answer.
解决方案:如果需要嵌套事务,则需要两个单独的Spring bean,它们都必须由@Transactional代理. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |