攻城獅在路上(壹) Hibernate(八)--- 映射Hibernate組成關係

來源:互聯網
上載者:User

標籤:c   style   class   blog   code   java   

一、使用組成關係的原則
  在不導致資料冗餘的前提下,儘可能減少資料庫表的數目及表之間的外鍵參照關係,因為建立多個表的串連是很耗時的操作。
  舉例說明:Customer類中的Address屬性,可以通過組件的方式來映射,避免了額外建立一張ADDRESS表,還能達到對象化操作的目的。
  設定檔:

?
1 2 3 4 5 6 7 <component name="homeAddress" class="mypack.Address">   <parent name="customer" />   <property name="province" type="string" column="HOME_PROVINCE"/>   <property name="city" type="string" column="HOME_CITY"/>   <property name="street" type="string" column="HOME_STREET"/>   <property name="zipcode" type="string" column="HOME_ZIPCODE"/> </component>

  說明:

?
1 2 3 name:設定被映射的持久化類的屬性名稱。 class:設定homeAddress屬性的類型。 <parent>:指定Address類所屬的整體類。

  注意:區分是否存在組成關係。Hibernate組件Address沒有OID。
  1、區分 實值型別和實體類型
    Hibernate組件Address沒有OID,因此不能通過Session來單獨儲存、更新、刪除或載入一個Address對象。當使用以下方法時:

?
1 2 3 4 session.load(Address.class,new Long(1)); session.save(address); session.update(address); session.delete(address);

  會拋出org.hibernate.MappingException:Unknow entity class: xx.xxx.Address。
  實值型別沒有OID,不能被單獨持久化,它的生命週期依賴於所屬的持久化類的對象的生命週期。
二、映射複合組成關係
  一個Hibernate組件可以包含其他的Hibernate組件,擷取其他實體類關聯。
  設定檔同上,僅是在component中嵌套一個component即可。
三、Hibernate組件總結:以Address為例
  1、沒有OID,在資料庫中沒有對應的表。
  2、不需要單獨建立Address類的對應檔。
  3、不能單獨持久化Address對象。Address對象的生命週期依賴於其整體類對象的生命週期。
  4、其他持久化類不允許關聯Address類。
  5、Address類可以關聯其他持久化類。
  6、在component元素中還可以嵌套component元素,用於映射複合組成關係。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.