1. ホーム
  2. java

[解決済み] CascadeType.REFRESHは実際に何をするのですか?

2023-06-23 12:21:38

質問

の部分はどうなっているのでしょうか? CascadeType.REFRESH は実際に何をするのでしょうか?

それに対する定義は

エンティティをリフレッシュすると、このフィールドに保持されているすべてのエンティティもリフレッシュされる

とありますが、これは実際にはどういうことなのでしょうか?どなたか、簡単な例を挙げていただけませんか?

どのように解決するのですか?

個々のCascadeTypeの説明は少しわかりにくいかもしれませんが、一般的なケースから簡単に把握する方法があります。

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

そのため EntityManager.refresh() は次のように定義されます。

データベースからインスタンスの状態をリフレッシュします。 データベースからインスタンスの状態を更新し を上書きします。

つまり、エンティティAがエンティティBへの参照を持っていて、その参照に @CascadeType.REFRESH である場合、そして EntityManager.refresh(A) が呼び出された場合 EntityManager.refresh(B) も暗黙のうちに呼び出されます。