你如何构建Grails服务,所以超类方法是非事务性的,子类方法是事务性的?

时间:2014-12-12 14:49:32

标签: grails inheritance transactions gorm

我有以下超级grails服务:

abstract class SuperClassService {
    public def execute(def payload) {
        def tracker = new TrackerDomain().save()
        doWork()
        tracker.status = 'done'
        tracker.save()
    }
    protected abstract doWork(def payload);
}

以及遵循这种模式的seveeral child class grails服务:

class SubClassService extends SuperClassService {
    protected doWork(def payload){
        new SomeDomain().save()
    }
}

在我的控制器中,我打开一个电话,执行'各种子类的方法。

我想要的是SubClass服务遵循传统的服务模式,其中任何问题都被回滚,但我希望在父类代码中创建的域都不会被回滚并立即提交(这样他们就可以了在子类服务代码仍在执行的情况下在跟踪页面上查看。我会首选不将所有内容设置为非事务性的,并且只将子类中的函数设置为事务性但如果这是唯一的选项,我希望也知道这一点。

1 个答案:

答案 0 :(得分:1)

您是否尝试使用@Transactional(propagation = Propagation.REQUIRES_NEW)注释子类服务方法?无论外部服务代码是否是事务性的,我认为应该这样做。