単一の JPA 2.x 'Map' プロパティを介して 2 つの双方向関係を指定することは可能ですか? マップ キーに関連付けられた関係は「多対多」である必要がありますが、マップ値は「多対 1」です。理想的には、Map メンバー変数を持つクラスが両方の関係を所有する必要があります。データベースはコードから自動生成されるため、永続化プロバイダー (EclipseLink) によって割り当てられたデフォルトの列名を受け入れることができます。以下のコードは、Java エンティティがどのように見えるかを示しています。どの注釈を挿入するかについて混乱しています。
@Entity public class A {
private Long mId;
@Id @GeneratedValue public Long getId() {return mId;}
protected void setId(Long pId) {mId = pId;}
private Set<B> mBs;
public Set<B> getBs() {return mBs;}
protected void setBs(Set<B> pBs) {mBs = pBs;}
}
@Entity public class B {
private Long mId;
@Id @GeneratedValue public Long getId() {return mId;}
protected void setId(Long pId) {mId = pId;}
private Map<A,C> mAToC;
public Map<A,C> getAToC() {return mAToC;}
protected void setAToC(Map<A,C> pAToC) {mAToC = pAToC;}
}
@Entity public class C {
private Long mId;
@Id @GeneratedValue public Long getId() {return mId;}
protected void setId(Long pId) {mId = pId;}
private B mB;
public B getB() {return mB;}
protected void setB(B pB) {mB = pB;}
}
JEE 6 チュートリアル@OneToMany
では、 or注釈を使用して Map値の関係@ManyToMany
を宣言できることが示唆されています。しかし、マップのキー関係の仕様に関する情報はあまり見当たりません。有望に見えましたが、双方向性を明確に定義する方法はありません。@MapKeyJoinColumn