gpt4 book ai didi

grails - 如何在 Grails 中的现有事务中创建新事务

转载 作者:行者123 更新时间:2023-12-04 21:44:05 26 4
gpt4 key购买 nike

我有机器和零件域类

在我的服务类中,我试图启动一个事务,在该事务中我想创建一个新事务并在它从内部事务出来时提交它。

Machine.withTransaction { // transaction 1
// some code to add Parts

// some code to remove Parts
Machine.withNewTrasaction { // transaction 2
// some code to remove Parts.
} // end of transaction 2

// some code to update couple of columns in machine table.
}// end of transaction 1

当它出来时 transaction 2我要 transaction 2不考虑 transaction 1 promise 机器的零件.但是 grails 将错误返回为 "Illegal attempt to associate a collection with two open sessions"如何提交 transaction 2单独单独不考虑 transaction 1 ?

最佳答案

您可以尝试使用 @Transactional 显式处理事务。服务类中的注解。

备注:-

  • 一旦添加 @Transactional服务方法的注解,服务类默认不被视为事务性的。
  • 由于您将功能拆分为两种方法,因此您必须使用 proxied调用第二个方法的服务类的实例,否则您无法为第二个方法创建新事务。因此,使用 applicationContext下面方法 1。
  • 你不需要 withTransactionwithNewTransaction再阻止。

  • 服务类看起来像:
    class MachineService{
    @Transactional
    def someMethodToAddParts(){
    ......
    grailsApplication.mainContext.machineService.someMethodToRemoveParts()
    ......
    }

    @Transactional(propagation = TransactionDefinition.PROPAGATION_REQUIRES_NEW)
    def someMethodToRemoveParts(){
    .......
    }
    }

    关于grails - 如何在 Grails 中的现有事务中创建新事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17553075/

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