grails - 如何构造Grails Services,使父类(super class)方法是非事务性的而子类方法是事务性的?

标签 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);
}

普通 child 类学习了遵循以下模式的服务:
class SubClassService extends SuperClassService {
    protected doWork(def payload){
        new SomeDomain().save()
    }
}

在我的 Controller 中,我启动了对各种子类的'execute'方法的调用。

我想要的是让SubClass服务遵循传统的Service模式,在该模式下会回滚任何问题,但是我希望在父类代码中创建的域既不回滚也不立即提交(以便可以在当子类服务代码仍在执行时,我将不将所有内容都设置为非事务性的,而只将子类中的函数设置为事务性的,如果这是唯一的选择,我也想知道。

最佳答案

您是否尝试过使用@Transactional(propagation = Propagation.REQUIRES_NEW)注释子类服务方法?我认为,不管外部服务代码是否具有事务性,它都应该可以解决问题。

关于grails - 如何构造Grails Services,使父类(super class)方法是非事务性的而子类方法是事务性的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27446146/

相关文章:

javascript - Node js。 Sequelize 交易

grails - 为什么在 GSP 中包含 Groovy 代码是个坏主意?

python - Mixin 类 __init__ 函数不会自动调用吗?

php - 理解 php 中的继承

asp.net-mvc - 如何为启用延迟加载的 MVC 应用程序应用事务隔离级别?

ruby - 如何使用 ruby​​ mysql2 执行事务

grails - 用户输入的grails货币值

validation - 在Grails域对象中,是否可以基于另一个字段来验证一个字段?

unit-testing - Grails单元测试不起作用-NoClassDefFoundError:junit/framework/TestCase

c++ - 使用具有同名方法的派生类的对象访问基类的方法