【发布时间】:2011-07-02 10:03:54
【问题描述】:
我在同一个服务类中有这两种方法:
boolean meth1(DomClass dom1) { //参数是域类DomClass的一个实例 ... meth2(dom1) ... dom1.delete(刷新:真) ... 返回真 } 布尔方法 2(DomClass dom1){ ... dom1.changeSomeProperty dom1.save(刷新:真) 返回真 }问题在于,在调用dom1.delete(flush: true) 的行上,程序会因deleted object would be re-saved by cascade (remove deleted object from associations) 而崩溃。
现在,我不太了解 Hibernate,但我的猜测是,这两种方法都在创建一个新事务,meth1 有第一个事务,meth2 有第二个事务。事实上,如果我删除 dom1.save 一切正常。
现在,我的问题是:我可以让 meth1 包含来自 meth2 的所有代码,但这意味着我会重复很多代码(在我的真实示例中,我想在很多地方重用一些逻辑)。如何通过使所有服务方法堆栈在同一个事务中运行来重用一种方法上的代码(如果这确实是问题,否则:“问题是什么?”)
【问题讨论】:
-
让我们查看 dom1 的域映射以及引用它的任何其他类。
标签: hibernate grails transactions grails-orm