2015-02-23 36 views
0

以下內容的relation mapping example爲地圖,我有地圖鍵列關係註釋的JPA:使用複合主鍵在地圖關係

EMPLOYEE

ID FIRSTNAME LASTNAME SALARY 
1 Bob   Way   50000 
2 Sarah  Smith  60000 

PHONE

ID OWNER_ID PHONE_TYPE AREACODE NUMBER 
1 1   home  613   792-7777 
2 1   cell  613   798-6666 
3 2   home  416   792-9999 
4 2   fax   416   798-5555 

@Entity 
public class Employee { 
    @Id 
    private long id; 
    ... 
    @OneToMany(mappedBy="owner") 
    @MapKeyColumn(name="PHONE_TYPE") 
    private Map<String, Phone> phones; 
    ... 
} 

@Entity 
public class Phone { 
    @Id 
    private long id; 
    ... 
    @ManyToOne 
    private Employee owner; 
    ... 
} 

有沒有什麼辦法表示OWNER_ID和PHONE_TYPE是複合主鍵?

回答

1

由於PHONE_TYPE是Employee類中Map的一部分,OWNER_id是Phone類的一部分,因此無法爲複合主鍵發信號。除此之外,這也不是你的主鍵:主鍵是id屬性(就像你擁有它)。你實際需要的是在這兩列上指定一個唯一的鍵。爲此,一種解決方案是放棄Employee類中的Map,並將phoneType移動到Phone類中,然後在那裏添加UniqueConstraint。 PS:當然,如果你願意,你可以簡單地對DB級別進行約束,而不需要對Java代碼進行任何改變。

+0

好的,謝謝。但是,當我移動phone_type時,我如何從員工那裏獲得電話的參考信息,即如何獲取所有參考實體? – 2015-02-23 15:29:14

+0

作爲'列表'。它的一個小缺點是,你無法從該列表中快速檢索出它的類型,但最大的好處是你在映射時可以獲得更多的靈活性,並且可能還有搜索本身。 – 2015-02-23 15:31:27