美孚有:@ManyToMany(的mappedBy = 「富」)
@ManyToMany(mappedBy = "foos")
private Set<Bar> bars
和酒吧有:
@ManyToMany
private Set<Foo> foos
確實的mappedBy的位置屬性做出一個雙向的關係有什麼區別,其他比表是否被稱爲foo_bar或bar_foo;沒有mappedBy屬性,我得到兩個連接表,foo_bar和bar_foo。
美孚有:@ManyToMany(的mappedBy = 「富」)
@ManyToMany(mappedBy = "foos")
private Set<Bar> bars
和酒吧有:
@ManyToMany
private Set<Foo> foos
確實的mappedBy的位置屬性做出一個雙向的關係有什麼區別,其他比表是否被稱爲foo_bar或bar_foo;沒有mappedBy屬性,我得到兩個連接表,foo_bar和bar_foo。
如果關聯是雙向的,一側具有成爲所有者和一側具有成爲逆端部(即,其將在所述關聯更新的關係值時被忽略。表):
因此,具有mappedBy
屬性的一面是反面。沒有mappedBy
屬性的一側是所有者。
所有者方是Hibernate查看哪一方存在的一面。因此,例如,如果將Foo添加到Bar的一組foos中,Hibernate會將新行插入到連接表中。相反,如果您將一個條添加到Foo的條形集中,則不會在數據庫中修改任何內容。
如果我想讓他們互相反映,如果添加了一個應該修改數據庫的酒吧,該怎麼辦? – NimChimpsky
@NimChimpsky:在雙向關係中,當您更改Foo.bars時,您應該相應地更改Bar.foos,因此您不應該在修改內容時關心保存在數據庫中的內容。 「所有權」的概念只是關於數據庫的組織,而你的代碼應該完全不瞭解它。 –
你有一個雙向的關聯:當你添加一個條到foo時,也添加foo到條。 –
mappedBy
告訴Hibernate關係「擁有」鏈接的哪一側。在OneToMany
或OneToOne
中,使用mappyedBy
告訴Hibernate在另一個表中將會有一個外鍵用於存儲鏈接。
當涉及到ManyToMany
時,有一個連接表,所以既不直接鏈接到另一個對象。但是,hibernate仍然需要知道哪些是「擁有」的一方,知道如何級聯操作。
-1:mappedBy不指示哪個表具有外鍵,它與級聯無關。 –
富和酒吧真的是一個糟糕的選擇這個詞。請考慮更多與現實世界中存在的關係有關的具體例子。 – haventchecked