2015-05-17 112 views

回答

12

比方說,你必須同時使用目標實體表(例如B),其具有@ManyToOne協會加時賽實體B

@JoinColumn將定義目標表的外鍵的實體A(如B_ID)。

@Entity 
public class A { 

    private Long id; 

    @ManyToOne 
    @JoinColumn(name="B_ID") 
    private B b; 

} 

@JoinTable將使用一個單獨的表來保存AB之間的關係。

@Entity 
public class A { 

    private Long id; 

    @ManyToOne 
    @JoinTable(
     name = "A_B", 
     joinColumns = @JoinColumn(name = "B_ID"), 
     inverseJoinColumns = @JoinColumn(name = "A_ID") 
    ) 
    private B b; 

} 

這一次既不A也不B含有任何外鍵,因爲有一個單獨的表(例如A_B)持有AB之間的關聯。

+0

所以一個JoinTable是一個N-N關係? – julestruong

+0

在數據庫術語中,它是一個多對多的關聯。在這種情況下,一個FK將具有唯一的約束,以將其與連接表一對多關聯。 –

3

@JoinTable將兩個表的id存儲到一個單獨的表中,而@JoinColumn將另一個表的id存儲在一個新列中。

@JoinTable:這是默認類型。當你需要更規範的數據庫時使用它。即。以減少冗餘。

@JoinColumn:使用它可以獲得更好的性能,因爲它不需要連接額外的表。

相關問題