CascadeType.REFRESHは実際に何をしますか?


82

何ですか CascadeType.REFRESH実際にますか?

その定義は

エンティティを更新すると、このフィールドに保持されているすべてのエンティティも更新されます

しかし、これは実際にはどういう意味ですか?誰かが私に簡単な例を教えてもらえますか?

回答:


119

個々のCascadeTypeの説明は少し混乱する可能性がありますが、一般的なケースからそれを理解する簡単な方法があります。

いずれのCascadeType値についてもXEntityManagerインターフェースを使用してインスタンスで操作が呼び出され、そのインスタンスに他のエンティティインスタンスへの参照があり、その関連付けがCascadeType.X定義されている場合、EntityManager操作はその関連付けられたエンティティにも適用されることを意味します。

したがってEntityManager.refresh()、次のように定義されます。

データベースからインスタンスの状態を更新し、エンティティに加えられた変更がある場合はそれを上書きします。

エンティティAがエンティティBへの参照を持っており、その参照がで注釈されているのであれば@CascadeType.REFRESH、とEntityManager.refresh(A)呼ばれ、その後、EntityManager.refresh(B)暗黙的にも呼ばれています。


これは古い投稿ですが、上記のAとBの例を使用すると、Bのインスタンスが現在デタッチされている場合、CascadeType.PERSISTによってBが永続的になりますか?HibernateのJPA実装を使用しています。
アンディ

4
私自身の質問に答えました。答えはノーです。オブジェクトを永続化するには、オブジェクトに対してsaveを呼び出す必要があります。
アンディ

永続状態のオブジェクトをマージするとどうなりますか?
abhijeetpathak19年

9

更新による取得:管理対象オブジェクトは、更新方法を使用してデータベースから再読み込みできます。

メモリ内の管理対象オブジェクトのコンテンツは破棄され(変更がある場合はそれを含む)、データベースから取得されたデータに置き換えられます。これは、取得後に別のEntityManagerによって変更された可能性がある場合に備えて、アプリケーションがエンティティオブジェクトの最新バージョンを確実に処理するのに役立つ場合があります。

ソース:http//www.objectdb.com/java/jpa/persistence/retrieve

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.