关于spring嵌套事务的问题

FiShelly_ 2015-09-22 08:21:22
spring如何控制多个事务进行统一回滚? 比如我一个方法内有两个涉及到dao的操作A和B,现在A正常执行了,但是B抛出异常,那么这个时候要如何设置能够实现两个操作都回滚到初始状态?

public boolean save(Aa aa, Ab ab) {
try {
aDao.doCreate(aa); //1
int a = 1/0;
bDao.doCreatee(ab); //2
} catch (Exception e) {
e.printStackTrace();
}

return false;
}

上面是一个service类里面的一个方法,并配置了事务传播方式为:NESTED,当1执行之后,遇到异常,结果1还是提交到了数据库。现在要如何实现,当遇到异常之后,能够回滚到初始状态,而不是将1提交。
...全文
252 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
开拓者Amadues 2015-09-28
  • 打赏
  • 举报
回复
你可以重新写个后台方法,把你原先的两个事务的代码都包进去。 如果你不写新方法要实现你说的效果,理论上需要有个额外的进程,存取两个事务里的SQL语句,然后一并执行,但是这个需要借助第三方框架,而且是比较复杂的,Hibernate和Mybatis这种不确定可以不可以。 另外就是要说下概念性的,事务的特性之一是具有原子性,不可分割,所以如果两个事务并成一个,那原先那两个就不能称为事务了。
从小就很呆 2015-09-28
  • 打赏
  • 举报
回复
事务应该放在service层,毕竟是一个完整的业务的体现
zuode10 2015-09-26
  • 打赏
  • 举报
回复
首先,楼主配置的是save方法为NESTED,跟 A B 操作并无关系啊。 其次,楼主自己try 和catch了异常,然后直接打印处理了,Spring事务如何帮你? 所有,楼主可以试试直接配置save为REQUIRED,不要自己try catch
bartholomew4 2015-09-25
  • 打赏
  • 举报
回复
对自己管理事务有把握的可以自己开启事务来代替spring事务
liangtu 2015-09-25
  • 打赏
  • 举报
回复
事务加到serivcie层,把需要的dao放到serivce中
痴恋丿君 2015-09-22
  • 打赏
  • 举报
回复
同求,也遇到过这个问题
whos2002110 2015-09-22
  • 打赏
  • 举报
回复
为什么要设置为NESTED, 就使用默认的REQUIRED,在同一个事务中就可以了呀

67,538

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧