2017-08-30 151 views
0

我正在使用多租户DB的Grails 3应用程序。可以理解的是,对于连接池性能的原因,对多租户数据库的任何查询都需要处于事务中。我没有链接,但Graeme Rocher在SO上的某个地方将其概述。Grails withTransaction()和事务服务方法之间的区别

所以,当我做了它工作得很好:

MyDomainClass.withTransaction { status -> 
    doStuffHere(); 
} 

,但是当我动议到服务方法

@Transactional 
class MyService { 
    doStuffHere() { 
    } 
} 

该方法将抛出一个“无会话找到”错误,因为它会如果我没有使用上面的withTransaction()方法。

有人知道为什么区别?有什么我应该在服务上设置?在上面的服务的doStuffHere()方法中使用withTransaction()似乎是多余的。

+0

你可以在这里找到答案http://docs.grails.org/2.3.11/guide/services.html – Dasma

回答

1

主要区别在于它们如何表示交易的范围。

withTransaction用事务覆盖块内的代码。

@Transactional做同样的事情,但与方法内的代码。

还要注意,withTransaction和@Transactional(不带任何参数)使用PROPAGATION_REQUIRED,所以当的代码事务块中调用它将使用的现有事务。

相关问题