2

Spring JPA でトランザクションを開始/停止する一般的な方法は、@Transactional でパブリック関数に注釈を付けることです。

私が理解できないのは、クラスに注釈を付けてスコープを少し広げることができるかどうかです。

3 つの関数を呼び出す Web サービスがあるとします。最初の 2 つはデータを操作し、セッションに接続されたメモリに残しますが、3 番目の呼び出しでは変更されたエンティティを保存します。これのベストプラクティスは何ですか?

4

1 に答える 1

3

あなたが話していることは、会話管理とも呼ばれます。

トランザクションはできるだけ短くする必要があることに注意してください。複数のリクエスト - レスポンス ループ中にデータベース トランザクションを維持することはオプションではありません (技術的な理由から: トランザクションはスレッドにバインドされ、一般に 2 つのリクエストは 2 つの異なるスレッドによって処理されます)。

ただし、JPA は、会話管理の実装を支援するためにExtended Persistence Contextを提供します。

拡張永続コンテキストは、読み取り専用操作のトランザクション境界の外で使用できます。すべての非読み取り専用操作は、トランザクション内で実行する必要があります。基本的に、拡張永続コンテキストはトランザクションに参加できます。これが、会話の最後に拡張永続コンテキストをコミットする方法です。

于 2013-01-02T14:51:56.487 に答える