1
  • 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行入れると答えが変わる?(つまり、異なるエンティティ マネージャ間で分離されたエンティティの共有が許可されているか)

4

1 に答える 1

0
  • いいえ、単一のエンティティを複数EntityManager
  • はい、分離されたエンティティがある場合は、たとえば、を使用して別のエンティティによって管理されるようにすることができますEntityManagermerge()

ただし、デタッチされたエンティティに(カスケードによって)EntityManager適用することは許可されていないため、この場合は例外をスローする必要があります。persist()カスケードオプションを削除するか、merge()の代わりに使用する必要がありpersist()ます。

また、カスケードを削除すると、がなくてもこのコードを実行できると思います。detach()その場合、entityAはによって管理されないためem2です。

于 2012-07-09T16:20:10.540 に答える