JPA 2.0仕様に従って、次のように2つの異なるエンティティマネージャ間でエンティティを共有することは許可されていますか:
A entityA = em1.find(entityA.class,1L); B entityB = new entityB(); b.setA(entityA); //entityB refers to entityA via @ManyToOne reference, cascade=CascadeType.PERSIST is enabled em2.persist(entityB); em2.flush();
em1.detach(entityA);
1行目と2行目の間に1行入れると答えが変わる?(つまり、異なるエンティティ マネージャ間で分離されたエンティティの共有が許可されているか)
質問する
687 次
1 に答える
0
- いいえ、単一のエンティティを複数
EntityManager
の - はい、分離されたエンティティがある場合は、たとえば、を使用して別のエンティティによって管理されるようにすることができます
EntityManager
merge()
ただし、デタッチされたエンティティに(カスケードによって)EntityManager
適用することは許可されていないため、この場合は例外をスローする必要があります。persist()
カスケードオプションを削除するか、merge()
の代わりに使用する必要がありpersist()
ます。
また、カスケードを削除すると、がなくてもこのコードを実行できると思います。detach()
その場合、entityA
はによって管理されないためem2
です。
于 2012-07-09T16:20:10.540 に答える