2009-08-20 61 views
30

在這個文件(向下滾動到單向節):Hibernate單向一對多關聯 - 爲什麼連接表更好?

http://docs.jboss.org/hibernate/stable/annotations/reference/en/html_single/#entity-mapping-association-collections

它說,有一個連接表單向的一對多關聯是隻使用了一個外鍵列更喜歡國有實體。我的問題是,爲什麼它更受歡迎?

+0

看到http://stackoverflow.com/questions/2092611/why-is-it-recommended-to-avoid-unidirectional-one-to-many-association-on-a-forei – 2012-10-23 11:30:47

回答

36

考慮所擁有的實體類型也可以由另一個父實體類型擁有的情況。你把擁有的表中的外鍵引用放到兩個父表中嗎?如果你有三種父類型呢?它只是不能擴展到大型設計。

連接表將連接解耦,以便擁有的表不知道父表的含義,從而允許設計優雅地縮放。

+1

看到區別內部SQL操作在連接表和外鍵中調用http://stackoverflow.com/q/18333198/418439 – 2013-08-22 02:20:06

11

如果子實體只有一個父類型,則不需要連接表。 我用JPA做過這個(帶有hibernate impl。)。

優點: 少一個表。 也許性能更好。 不是「這張桌子是幹什麼的?」輸入問題。

缺點: 從OO的角度來看,引入了child和parent之間的附加依賴關係。在實踐中,這可能不是什麼大不了的事情,因爲這種關係在小孩中是私密的。

 
e.g. 
parent: 
@OneToMany(mappedBy = "parent", cascade = CascadeType.ALL) 
@MapKey(name = "name") 
private Map children; 

child: 
@ManyToOne(optional = false) 
private Parent parent; 
+0

你能否詳細說明這個劣勢 – 2011-02-01 13:40:01

+0

精益劣勢。 – Conor 2011-02-15 17:04:01

+0

請注意,使用JPA 2.0時,不再需要將子對象引用給父對象。只需在父級上使用@JoinColumn註釋。 – 2014-10-26 19:18:53

相關問題