2012-09-12 109 views
2

根據hibernate文檔,hibernatenate團隊強烈建議不要在沒有連接表的情況下使用一對多映射。我想知道這是因爲執行問題還是有其他原因背後的原因。使用joinColumn單向一對多映射

說,如果有一個員工誰可以有很多手機號S所以有這樣的映射我有

@Entity 
public class Employee { 
... 
@OneToMany 
@JoinColumn(name="employee_fk") 
public List<Phone> phones; 
... 
} 

@Entity 
public class Phone { 
... 
} 

Hibernate會生成帶有外鍵的電話表,所以我沒有看到任何問題就在這裏。我也不想讓電話班擁有員工財產。 Hibernate團隊建議在這種情況下使用連接表,但爲什麼我應該不必要地創建一個表?

回答

2

這是一個比性能問題更多的設計問題。如果您認爲電話不知道其分配給的員工,這意味着電話實體與員工實體無關。如果它與Employee實體無關,則其表不應該有Employee表的外鍵。

此外,由於電話不知道其員工,這意味着它可能被重用並與其他類型的實體相關聯:公司,客戶等。將外鍵全部設置爲全部電話本身可以有電話的實體。

2

在單向映射休眠的情況下會打的DB兩次,

一個新的手機不一樣的員工約翰的,它會做這樣的

財產以後在PHN沒有表中沒有插入新手機

更新員工ID(約翰)這PHN沒有在PHN沒有桌子

而且更需要映射你的手機持久類與特定僱員登記,否則你的手機類將被重用,我猜你不想這樣做。