4

異なる永続性ユニットのエンティティを現在のマッピングに配置するための特定の構成はありますか?

例えば:

@RooJpaActiveRecord(persistenceUnit = "persistenceUnit_central")
public class UserGroups{

    //users come from `persistenceUnit_client`
    //how to work this out?
    //can mappedBy and targetEntity works the same way
    //as they are in the same persistence unit?
    @OneToMany
    private List<User> users;
}

前もって感謝します。

4

2 に答える 2

2

真っ直ぐにできないとは思いません。持続性ユニットは、明確に分離されていることを意味します。異なるエンティティ マネージャーを持っているため、異なるデータベースまたはスキーマからのものである可能性があります (これが通常の理由です)。

persistence.xmlで、複数の永続化ユニットに存在する同じエンティティ クラスを定義することはできますが、前述したように、各マネージャーによって個別に処理されます。これは、これを行うことができないことを意味します:

UserGroups ug = em1.find(UserGroups.class, ...); // entity manager 1
User u = em2.find(User.class, ...); // entity manager 2

// exception will be thrown on commit 
// - from the point of view of em1, "u" is detached
ug.getUsers().add(u); 

電話em1.merge(u)で問題が解決するかどうかはわかりません — まだそのような状況に遭遇したことはありません。ただし、確実にコピーを作成しUserて、目的の永続化コンテキストにマージできます。

于 2012-10-04T21:31:06.753 に答える
0

MaDaは正しいです。私はこの質問に対するこの答えを、この問題の解決策を強調するためだけに作成しました。

まず、これまでのところ、AとBが異なる永続化ユニットからのものである間、エンティティB内でエンティティAのインスタンスを永続化することはできません。正しく機能させるための安全な方法は、エンティティAのインスタンスを@Transientにすることです。そうすると、そのインスタンスをデータベースに関連付けるための変更は行われません。ただし、エンティティ(セッターとゲッター)間の関係を手動で設定するのは少し面倒です。これは未解決の問題になります。

再びマダに感謝します。

于 2012-10-17T20:53:49.617 に答える