gpt4 book ai didi

java - Spring AOP 事务管理和 Hibernate : undesired commits to database

转载 作者:行者123 更新时间:2023-11-30 09:44:22 26 4
gpt4 key购买 nike

是否可以为仅调用 DAO(数据访问对象)方法的方法启用事务处理?


类 BusinessLayerFacade 实现 Facade {



//此处不允许进行事务处理
公共(public) X foo() {
//做一点事
}

公共(public) Y 改变了(DomainObject myObject){
//做一点事
//<-- 开始事务
//调用DAO
//做一点事
//调用DAO
//<-- 结束交易
}

}

允许 BusinessLayerFacade 中所有方法的事务会导致对数据库进行一些不需要的提交。例如。当调用 foo() 时,在执行 changed(DomainObject myObject) 时抛出 ExceptionmyObject 已提交到数据库而不是还原事务回滚的变化。

有什么想法吗?

这确实是一个按名称过滤方法的选项但是我们能不能在这里放一些魔法 ;-) 是否可以在 in 中第一次调用 DAO 方法时启动事务changed() 并在 changed() 返回时开始提交。如果可能的话,我在类中命名新方法时就不必小心了。

谢谢,斯特凡

最佳答案

如果抛出运行时异常,事务将回滚。如果抛出应用程序异常则不会。您可以通过应用注释 @Transactional 来自定义它:

@Transactional(rollbackFor=SomeException.class, noRollbackFor=SomeOtherException.class)

这也可以在 XML 中全局自定义,使用 tx:methodrollback-forno-rollback-for 属性元素。

阅读Spring reference documentation了解更多详情。

关于java - Spring AOP 事务管理和 Hibernate : undesired commits to database,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7930955/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com