0

是否可以通过单个 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建议使用@OneToManyor @ManyToManyannotations 来声明 Map关系。但是,我没有看到太多关于 Map关系规范的信息。@MapKeyJoinColumn看起来很有希望,但没有提供明显的方法来定义双向性。

4

0 回答 0