web-dev-qa-db-ja.com

データベースに関してREFRESHとMERGEはどういう意味ですか?

私は興味があり、この答えをすぐに見つける必要があります。 Googleはあまり役に立ちません。

Java Persistence APIには、関連付けられたエンティティで操作をカスケードするようにフレームワークに指示するこれらのプロパティがあります。

CascadeType.PERSIST
CascadeType.DELETE
CascadeType.MERGE
CascadeType.REFRESH

最初の2つが何を意味するかを知っています。Bを持つオブジェクトAを永続化すると、Bも永続化し、Aを削除すると、Bも削除します。

しかし、私は他の2つが何を成し遂げているのか理解できません。助けて?

86
André Chalella

REFRESHは、「データベースからの状態の変更をすべて表示にプルする」ことを意味します。これをカスケードするのは簡単です。つまり、関連付けられているすべてのエンティティが更新されます。

MERGEは、「保存」に近い複雑な何かを意味しますが、「この切り離されたエンティティを管理状態に戻し、状態の変更を保存する」ようなものです。カスケードとは、関連するすべてのエンティティが同じ方法でプッシュバックされることを意味し、.merge()から返される管理エンティティハンドルには、関連するすべての管理エンティティがあります。

関連ドキュメントの1つのインスタンスへのリンク

74
chaos

多対多の関係に対するJPA注釈の意味

  • ALL-ソースエンティティで実行されるすべての可能なカスケード操作は、関連付けのターゲットにカスケードされます。
  • MERGE-ソースエンティティがマージされると、マージは関連付けのターゲットにカスケードされます。
  • PERSIST-ソースエンティティが永続化されている場合、永続化は関連付けのターゲットにカスケードされます。
  • 更新-ソースエンティティが更新されると、更新は関連付けのターゲットにカスケードされます。
  • REMOVE-ソースエンティティが削除されると、関連付けのターゲットも削除されます。

私自身はこのように見ています(より読みやすい):

  • MERGE-既存のオブジェクトの場合、mergeテーブル内の既存のデータとオブジェクト内のデータをマージします。 (データベースに同期)
  • PERSIST-データベースのオブジェクトから新しいレコードを作成します。
  • REFRESH-オブジェクト内のデータを更新します。おそらく、同期が必要なデータベースに変更があったのでしょう。 (データベースから同期)
  • REMOVE-削除です。
81
cgp