Hibernate 嵌套事务,大神请进!

yaoIin 2016-11-25 11:31:47
Hibernate、Spring整合,使用HibernateTransactionManager事务管理器,在使用nested嵌套事务的时候,子事务出错时回滚到savepoint,但是Hibernate并没有把出错的操作移除,导致主事务提交的时候session flush又报错,最终主事务和子事务都回滚了。

环境:Spring3.0.2,Hibernate3.6.0,Mysql5.6;

异常是null id in Album entry (don't flush the Session after an exception occurs)【这个是我自己让它报错的,数据库非空校验不过】,
并不是Transaction rolled back because it has been marked as rollback-only。

代码逻辑大致如下:

ServiceA {
@Transactional(propagation = Propagation.NESTED)
@Override
public void error() throws Exception {
A a = new A();
aDao.save(a);
}
}

ServiceB {
@Transactional(propagation = Propagation.REQUIRED)
@Override
public void success() throws Exception {
B b = new B();
b.setName("456");
bDao.save(b);
try {
aService.error();
} catch (Exception e) {
// 这里调用的是ServiceA的error,这是不是Dao,目的用于测试嵌套事务。
}
}
}
...全文
277 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2016-11-27
  • 打赏
  • 举报
回复
回滚到savepoint是正常的,但是Hibernate并没把错误的操作移除,当success方法体的所有代码走完走SpringAOP事务的时候再commit又出错了。 别沉。
「已注销」 2016-11-26
  • 打赏
  • 举报
回复
要沉了,自己顶一下。

67,516

社区成员

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

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