2017-08-30 83 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,所以當的代碼事務塊中調用它將使用的現有事務。

相關問題