【发布时间】:2011-10-28 14:54:15
【问题描述】:
是否可以为仅调用 DAO(数据访问对象)方法的方法启用事务?
class BusinessLayerFacade implements Facade {
//no transaction handling allowed here
public X foo() {
//do something
}
public Y changed(DomainObject myObject) {
//do something
//<-- start transaction
// calling DAO
//do something
// calling DAO
//<-- end transaction
}
}
为BusinessLayerFacade 中的所有方法允许事务会导致一些不希望的提交到数据库。例如。当调用 foo() 并在执行 changed(DomainObject myObject) 时抛出 Exception 时,myObject 已提交到数据库,而不是在事务回滚时恢复更改。
有什么想法吗?
这无疑是一个按名称过滤方法的选项但是我们可以在里面放更多的魔法吗 ;-) 是否可以在第一次调用 DAO 方法时启动事务in changed() 并在 从 changed() 返回时开始提交。如果这是可能的,我在类中命名新方法时不必小心。
谢谢,斯特凡
【问题讨论】:
-
刷新和事务提交不一样。 Hibernate 可以决定在事务期间进行刷新 - 只是为了同步其会话和数据库状态。 hibernate 可以决定进行刷新然后回滚事务。
-
我在我的问题中更正了这一点。感谢您的建议!
标签: java hibernate spring transactions aop