2009-09-10 3 views
61

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

我々は、エンティティにこのフィールドの更新で開催されたすべてのエンティティを更新すると、それは

すぎる

の定義が、これは実際に何を意味するのでしょうか?誰かが私に簡単な例を教えてもらえますか?

答えて

95

個別のCascadeTypeの説明は少し混乱することがありますが、一般的なケースから簡単に理解できる方法があります。 CascadeType値のいずれかの

、操作XEntityManagerインタフェースを使用してインスタンスに呼び出され、そのインスタンスが他のエンティティインスタンスへの参照を有し、そしてその関連がCascadeType.Xが定義されている場合、次いでEntityManager動作もすることを意味その関連するエンティティに適用される。

だからEntityManager.refresh()は以下のように定義される:もしあれば、エンティティに を行った変更を上書き、 からデータベースをインスタンスの状態を更新

エンティティAがエンティティBを参照し、その参照が@CascadeType.REFRESHで注釈されており、EntityManager.refresh(A)が呼び出されたのであれば、次にEntityManager.refresh(B)は暗黙的とも呼ばれます。

+0

私はこれは古い記事ですけど、Bのインスタンスが現在取り外されている場合、上記のAとBのあなたの例をCascadeType.PERSIST原因Bが永続的になることでしょう使用して?私はHibernateのJPA実装を使用しています。 – Andy

+3

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

3

リフレッシュによる検索: 管理オブジェクトはリフレッシュ方法を使用してデータベースから再ロードすることができる。

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

出典:http://www.objectdb.com/java/jpa/persistence/retrieve

関連する問題