0

フラッシュが以前のすべてのエンティティ関係を自動的に永続化することを伴うかどうかについて、ちょっとした質問があります。これが私が意味することです:

shFood.setCuisines(cuisineSelection);
entityManager.flush(); 

shFood の永続化を指定しなくても、entityManager が自動的に shFood エンティティと料理 (shFood には、cuisineSelection によるカスケード永続化があります) エンティティを永続化するのはなぜですか?

いくつかの説明をいただければ幸いです。

4

1 に答える 1

1

この場合、shFood は新しいエンティティ インスタンスではなく、既に管理されているエンティティです。既に管理されているエンティティを管理対象にするために、persist を呼び出す必要はありません。このエンティティは、管理されているエンティティが閉じられるか、エンティティが永続コンテキストから切り離されるまで (たとえば、detachまたはclearを介して) 管理されたままになります。

あなたの場合に何が起こっていますか:

  1. あなたが示したコードの前のどこかで、マネージド エンティティ インスタンスへの参照を取得しますshFood。このインスタンスは、デタッチされるまで管理されたままになります。
  2. shFood.setCuisines(cuisineSelection)永続化コンテキストを変更します
  3. entityManager.flush()エンティティ マネージャが、永続コンテキスト内のエンティティに加えられた変更をデータベースにフラッシュするように強制します。管理エンティティに加えられたすべての変更はフラッシュされます。
于 2012-07-19T04:52:43.170 に答える