簡體   English   中英

在休眠狀態下處理一對多關系

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM