use*_*627 5 grails transactions
我有Machine and Parts域类
在我的服务类中,我试图启动一个事务,在该事务内,我想创建一个新事务,并在内部事务中将其提交。
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
Run Code Online (Sandbox Code Playgroud)
当它出来时,transaction 2我想transaction 2提交与机器无关的零件transaction 1。但是grails抛出了一个错误,如"Illegal attempt to associate a collection with two open sessions"
如何transaction 2单独提交单独而不考虑transaction 1?
您可以尝试使用@Transactional服务类内的注释显式处理事务。
笔记:-
@Transactional向服务方法添加注释,默认情况下该服务类将不被视为事务性的。proxied服务类的实例来调用第二个方法,否则您无法为第二个方法创建新事务。applicationContext因此,在方法 1 中使用下面的方法。withTransaction或withNewTransaction阻止。服务类看起来像:
class MachineService{
@Transactional
def someMethodToAddParts(){
......
grailsApplication.mainContext.machineService.someMethodToRemoveParts()
......
}
@Transactional(propagation = TransactionDefinition.PROPAGATION_REQUIRES_NEW)
def someMethodToRemoveParts(){
.......
}
}
Run Code Online (Sandbox Code Playgroud)