2017-08-30 11 views
0

私はマルチテナントDBを使ってGrails 3アプリケーションを開発しています。理解できるように、接続プールのパフォーマンス上の理由から、マルチテナントDBへのクエリはトランザクション内にある必要があります。私はリンクを持っていませんが、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を使用することに注意してください。

関連する問題