何ですか CascadeType.REFRESH実際にますか?
その定義は
エンティティを更新すると、このフィールドに保持されているすべてのエンティティも更新されます
しかし、これは実際にはどういう意味ですか?誰かが私に簡単な例を教えてもらえますか?
回答:
個々のCascadeTypeの説明は少し混乱する可能性がありますが、一般的なケースからそれを理解する簡単な方法があります。
いずれのCascadeType値についてもX、EntityManagerインターフェースを使用してインスタンスで操作が呼び出され、そのインスタンスに他のエンティティインスタンスへの参照があり、その関連付けがCascadeType.X定義されている場合、EntityManager操作はその関連付けられたエンティティにも適用されることを意味します。
したがってEntityManager.refresh()、次のように定義されます。
データベースからインスタンスの状態を更新し、エンティティに加えられた変更がある場合はそれを上書きします。
エンティティAがエンティティBへの参照を持っており、その参照がで注釈されているのであれば@CascadeType.REFRESH、とEntityManager.refresh(A)呼ばれ、その後、EntityManager.refresh(B)暗黙的にも呼ばれています。
更新による取得:管理対象オブジェクトは、更新方法を使用してデータベースから再読み込みできます。
メモリ内の管理対象オブジェクトのコンテンツは破棄され(変更がある場合はそれを含む)、データベースから取得されたデータに置き換えられます。これは、取得後に別のEntityManagerによって変更された可能性がある場合に備えて、アプリケーションがエンティティオブジェクトの最新バージョンを確実に処理するのに役立つ場合があります。