是否可以为仅调用 DAO(数据访问对象)方法的方法启用事务处理?
类 BusinessLayerFacade 实现 Facade {
//此处不允许进行事务处理
公共(public) X foo() {
//做一点事
}
公共(public) Y 改变了(DomainObject myObject){
//做一点事
//<-- 开始事务
//调用DAO
//做一点事
//调用DAO
//<-- 结束交易
}
}
允许 BusinessLayerFacade
中所有方法的事务会导致对数据库进行一些不需要的提交。例如。当调用 foo() 时,在执行 changed(DomainObject myObject)
时抛出 Exception
,myObject
已提交到数据库而不是还原事务回滚的变化。
有什么想法吗?
这确实是一个按名称过滤方法的选项但是我们能不能在这里放一些魔法 ;-) 是否可以在 in 中第一次调用 DAO 方法时启动事务changed()
并在从 changed()
返回时开始提交。如果可能的话,我在类中命名新方法时就不必小心了。
谢谢,斯特凡
最佳答案
如果抛出运行时异常,事务将回滚。如果抛出应用程序异常则不会。您可以通过应用注释 @Transactional 来自定义它:
@Transactional(rollbackFor=SomeException.class, noRollbackFor=SomeOtherException.class)
这也可以在 XML 中全局自定义,使用 tx:method
的 rollback-for
和 no-rollback-for
属性元素。
阅读Spring reference documentation了解更多详情。
关于java - Spring AOP 事务管理和 Hibernate : undesired commits to database,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7930955/