是否可以通过单个 JPA 2.x 'Map' 属性指定两个双向关系?与映射键关联的关系应该是“多对多”,而映射值是“多对一”。理想情况下,具有 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 Tutorial建议使用@OneToMany
or @ManyToMany
annotations 来声明 Map值关系。但是,我没有看到太多关于 Map键关系规范的信息。@MapKeyJoinColumn
看起来很有希望,但没有提供明显的方法来定义双向性。