[英]working with one-to-many relationship in hibernate
我仍在學習冬眠能做什么,這一次我正在嘗試一些似乎不起作用的東西。 我有2個表的用戶和contacts.as,您可以猜測是否有user_id作為外鍵來保持關系。 這是2個映射文件的片段。 首先是來自users.hbm.xml
<set name="contactsdetails">
<key column="userId"/>
<one-to-many class="Domain.Contacts"/>
</set>
這是來自contacts.hbm.xml
<many-to-one class="Domain.Users" name="userId"/>
當一切正常時,我的意思是在配置,映射文件側並從UsersDAO插入到用戶表中,我想同時插入到用戶和聯系人中。 意思是我創建了用戶對象並為各種屬性分配值,創建了一個或一組聯系人並將其賦予各種屬性,最后在保存用戶對象之前將其添加到用戶的contactdetails設置屬性中。當我嘗試這樣做時,我意識到這有點奇怪,因為contact userId屬性是用戶類型的,因此我將用戶添加到聯系人或每個聯系人對象中,然后在我堅持用戶對象之前將相同的聯系人對象添加到用戶的contactdetails屬性中。丟失了某些內容,嘗試時出現了nullpointerexcpetion。請您告訴我該怎么做? 謝謝閱讀
當具有指向實體B的實體A和指向實體A的實體B時,您具有休眠稱為雙向映射的功能。 這些可能很棘手,您必須小心,並告訴冬眠一方“擁有”這種關系。
有關如何管理這些關聯的信息,請參見休眠文檔的“雙向關聯”部分 。
您需要告訴Hibernate哪一方“擁有”該關系。 通常,我發現多對一方面最簡單。 為此,將inverse =“ true”添加到映射的一側。
<set name="contactsdetails" <!---->inverse="true"<!---->>
<key column="userId"/>
<one-to-many class="Domain.Contacts"/>
</set>
從文檔中:
僅對關聯的反向端所做的更改不會保留。 這意味着對於每個雙向關聯,Hibernate在內存中都有兩種表示形式:一個從A到B的鏈接,另一個從B到A的鏈接。如果考慮Java對象模型以及多對多關系,這將更容易理解。在Java中創建:
category.getItems().add(item); // The category now "knows" about the relationship
item.getCategories().add(category); // The item now "knows" about the relationship
session.persist(item); // The relationship won't be saved!
session.persist(category); // The relationship will be saved
非反面用於將內存中的表示形式保存到數據庫中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.