2017-02-19 214 views
0

我新的hibernate我通過幾個(12)教程轉眼就hibernate和在我的項目甚至實現,我得出了以下結論 -上映射:休眠

mapped by指物體的另一面是所有者

這只是針對數據庫的角度來看,實際上我是如何在數據庫中創建關係的,一般用mapped by來避免不必要的表。

從查看Java點這對你的代碼沒有任何影響,同樣的代碼與mapped by運行的行爲完全相同相同甚至我們刪除mapped by

我的上述理解是否正確,如果不是,請您解釋一下,在這種情況下,這種行爲有何不同?

回答

5

不,它不是。 mappedBy實際上與數據庫無關。當關聯是雙向的時,它告訴關聯的哪一方是擁有方。假設你在公司(反面)和僱員(所有者面)之間有關聯。當谷歌建立和約翰之間的關聯,

google.addEmployee(john); 

不會讓休眠保存協會在數據庫中,因爲你只設置關聯的反向側。

john.setCompany(google); 

會讓Hibernate將關聯保存在數據庫中,因爲你設置了關聯的所有者端。

每個雙向關聯都必須有一個所有者方和一個相反方。

在OneToMany雙向關聯中,所有者方必須是多方面的。

+0

我必須嘗試通過自己的,但只是想知道,如果我啓用級聯比'google.addEmployee(約翰)'將工作與否? – TheCurious

+1

不會。例如,在設置了一個cascase PERSIST的情況下,堅持使用google會堅持john,但john仍然不屬於google。 –

+0

正如你所說的**每一個雙向關聯都必須有一個所有者端和一個反面端**但是我堅持雙向,沒有'映射',但它只是在'@ onetomany'和'@ manytomany'的情況下創建了額外的表並且如果是@ @ onetoone,則在兩張表中加入joincolum。這是更好的數據庫設計的最佳做法嗎? – TheCurious

0

這很容易理解,mappedBy顯示了FK所在的位置,並且當JB Nizet傷心時,它顯示誰是關係的所有者,誰負責管理關係。

+0

它並不總是顯示FK所在的位置。例如,在多對多關聯中,mappedBy是必需的,但不涉及FK的位置。這不是思考mappedBy的正確方法。 –