2015-12-04 31 views
1

我期望做的是讓Object3實體的主鍵包含它的父Object1(@ManyToOne)和Object2,它是映射中Object3與Object1(property1)配對使用的鍵。這可能與EclipseLink有關,也許帶有註釋?EclipseLink:實體的PK圖,其中實體的PK是映射中的鍵

我希望是有道理的,概括地說:Object3的PK是(Object1,Object2的)

@Entity 
public class Object1{ 
    ... 
    private Map<Object2,Object3> property1; 
    ... 
} 

@Entity 
public class Object3{ 
    @Column(name = "c1") 
    private int number; 
    @ManyToOne 
    @JoinColumn(name = "Object1") 
    private Object1 object1; 
    ... 
} 

感謝您的幫助!

回答

0

用這種方式看看 - 你要傳遞給em.find並獲得一個特定的Object3實例? Object3需要映射到其所有外鍵字段用於其主鍵,或者它不是一個獨立的實體。類似:

@Entity 
    @IdClass(Object3PK.class) 
    public class Object3{ 
    @Column(name = "c1") 
    private int number; 
    @Id 
    @ManyToOne 
    @JoinColumn(name = "Object1") 
    private Object1 object1; 
    @Id 
    @ManyToOne 
    @JoinColumn(name = "Object2") 
    private Object2 object2; 
    ... 
    } 

    public class Object3PK{ 
    private int object1; 
    private int object2; 
    } 

在上文中,Object3PK必須使用相同的類型作爲內Object1和Object2的主鍵。這是描述here

在Object1中,然後,您可以使用標準的OneToMany映射指向Object1 ManyToOne映射回。唯一缺少的部分是MapKey

@Entity 
    public class Object1{ 
    ... 
    @OneToMany(mappedBy="object1") 
    @MapKey(name="object2") 
    private Map<Object2,Object3> property1; 
    ... 
    } 
相關問題