0

次の関係が定義されています

エンティティ A には、エンティティ C との @OneToOne を持つエンティティ B との @OneToMany があります。

エンティティ A の作成時に、エンティティ B も作成し、それらの関係を設定します。すべてが期待どおりに機能します。

別のトランザクションでは、 - エンティティ A が DB からフェッチされ、対応するエンティティ B がフェッチされ、その後 - エンティティ C が作成されます。- エンティティ C はエンティティ B に設定され、両者の関係が構築されます。EntityManager.persist(Entity B) を使用すると、永続化マネージャーがエンティティ B を DB に再度挿入しようとし、エンティティ B の PK で一意の制約違反が発生します。 .

上記の使用状況では、エンティティはこの場合管理されており、簡単に更新できるはずなので、持続操作が複製を作成しようとするのはなぜでしょうか。

4

1 に答える 1

0

JPA では、アンマネージド インスタンスで persist が呼び出された場合、プロバイダーは例外をスローする必要があります。インスタンスからデータを取得してマネージド コピーにマージすることは明らかであるため、マージのみを使用できます。B が管理されている場合、persist 呼び出しは無視されるため、B がどのように切り離されるか、persist を呼び出したエンティティ マネージャーとは別のエンティティ マネージャーで読み込まれたことを意味します。

于 2013-02-06T12:32:36.947 に答える