web-dev-qa-db-ja.com

SpringデータJPAのsaveとsaveAndFlushの違い

JpaRepositoryを介してCRUD操作をテストすることにより、スプリングデータJPAを学習しようとしています。

savesaveAndFlushの2つのメソッドに出会いました。これら2つの間に違いはありません。 saveを呼び出すと、私の変更もデータベースに保存されるので、saveAndFlushを使用します。

112
Anand

saveAndFlushでは、変更はこのコマンドですぐにDBにフラッシュされます。 saveの場合、これは必ずしも正しいとは限らず、flushまたはcommitコマンドが発行されるまで、メモリ内にとどまる場合があります。

ただし、トランザクションの変更をフラッシュしてコミットしなくても、変更はwo n'tでコミットされるまで外部のトランザクションに表示されることに注意してください。トランザクション。

あなたのケースでは、おそらく何らかのトランザクションメカニズムを使用します。これは、すべてがうまくいく場合にcommitコマンドを発行します。

119
user1918305

使用している休止状態のフラッシュモードに応じて(AUTOがデフォルトです)saveは、変更をすぐにDBに書き込む場合と書き込まない場合があります。 saveAndFlushを呼び出すと、モデルの状態とDBの同期が強制されます。

フラッシュモードAUTOを使用し、アプリケーションを使用して最初にデータを保存してから再度選択する場合、選択が最初にフラッシュをトリガーするため、save()saveAndFlush()の間にbahviorの違いは表示されません。 ドキュメント を参照してください。

28
Ralf