Hibernate不支持Nested Transaction
Spring-Orm中HibernateTransactionManager类文档中均有一段话:
也就是说,Hibernate根本就不支持NestedTransaction,最新的Hibernate4也是如此。在配置文件中设置"nestedTransactionAllowed=true",其实只对JDBC事务起效(如使用Spring的JdbcTemplate)。
经过测试,Hibernate框架托管下的NestedTransaction方法(子事务)抛出异常时,Spring日志会提示Rollingbacktransactiontosavepoint,不过所谓“回滚”的是使用JDBC操作的内容,如果事务中没有JDBC操作等于是没有效果的。子事务操作会被保存到Hibernate的缓存中,并在下一次flush时被提交。
参考:
http://cowbane.iteye.com/blog/504270
解惑spring嵌套事务
http://www.iteye.com/topic/482984
SpringNested事务之再解惑
http://forum.springsource.org/showthread.php?62656-Unable-to-roll-back-when-transaction-propagation-quot-NESTED-quot
Unabletorollbackwhentransactionpropagation="NESTED"
http://static.springsource.org/spring/docs/3.0.x/api/org/springframework/orm/hibernate3/HibernateTransactionManager.html
org.springframework.orm.hibernate3.HibernateTransactionManager