2009-06-02 21 views
3

(すべて)DTOにすべてをコピーせずに、複数のサーバーのデータベースにJPAエンティティを保持することは可能ですか?複数のデータベース(分散システム)で同じJPAエンティティを保持する方法は?

私たちは分散システムを持っています。一部のアプリケーションには、キャッシュ用のDBがあります。 JPAプロバイダは、切り離されたオブジェクトを永続させることができないと訴える例外をスローします。

しかし、私はエンティティのIDをこの追加のDBにそのまま残しておきたいと思います。

(JPA 1.2、EJB 3.0は、Glassfishのv2.1のは、TopLink Essentialsの)

答えて

3

はちょうどem.merge(OBJ)、(OBJ)em.persistし​​ないでください。マージは、添付オブジェクトとデタッチオブジェクトの両方で機能します。

デタッチされたオブジェクトから開始する場合は、オブジェクトをそれぞれのEntityManagersにマージします。オブジェクト間でIDキーを同じに保つのであれば、マージした最初のオブジェクトからキーを引き出し、それを将来使用します。

あなたが(私にはわからない)おそらく、1つのEMで管理されているオブジェクトを別のEMでマージしようとしていません。あなたはそれが動作するかどうかを確認するためにテストすることができます、私はちょうどあなたがしようとすると起こるか分からない。

So.

YourEntity unattachedEntity = ... // your original entity object. 

YourEntity managedEntity = em1.merge(unattachedEntity); 

// managedEntity now has the primary key assigned by the DB 
unattacheEntity.setPrimaryKey(managedEntity.getPrimaryKey()); 

em2.merge(unattachedEntity); 
em3.merge(unattachedEntity); 

何かがうまくいくはずです。

+0

ありがとうございました!それは本当にちょうど働いた!あなたの答えはとても役に立ちました!私は前にマージしようとしましたが、2つのエンティティを使用してあなたの魔法のトリックではありません。 – SAL9000

関連する問題