歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Hibernate 關聯關系學習筆記

Hibernate 關聯關系學習筆記

日期:2017/3/1 10:39:44   编辑:Linux編程

一、總體來分有一對一、一對多、多對一、多對多這四種關系。

二、一對一關系

1、單向主鍵


2、單向外鍵

具體需求是Husband實體中保存Wife的引用,得到husband的實體後就可以取得wife實體。且關系是一對一。

Husband實體簡略信息

[java]
  1. private int id;
  2. private String name;
  3. private int age;
  4. private Wife wife;
Wife實體簡略信息

[java]
  1. private int id;
  2. private String name;
現在使用xml構建從husband到wife的一對一關聯,xml中使用的是<many-to-one>標簽,理解的大概是外鍵一般都是保存在多這一方,站在當前實體husband的位置上考慮,即保存引用的這一方,這樣就存在關聯的關系,之後加上加上unique屬性進行限定為一對一的關系。(多對一的特殊情況)

[html]
  1. <hibernate-mapping>
  2. <class name="com.akwolf.bean.Husband" table="HUSBAND">
  3. <id name="id" type="int">
  4. <column name="ID" />
  5. <generator class="native" />
  6. </id>
  7. <property name="name" type="java.lang.String">
  8. <column name="NAME" />
  9. </property>
  10. <property name="age" type="int">
  11. <column name="AGE" />
  12. </property>
  13. <many-to-one name="wife" class="com.akwolf.bean.Wife" fetch="join" unique="true">
  14. <column name="WIFE" />
  15. </many-to-one>
  16. </class>
  17. </hibernate-mapping>

Wife.hbm.xml簡要配置。

[html]
  1. <?xml version="1.0"?>
  2. <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
  3. "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
  4. <!-- Generated 2011-10-2 22:15:15 by Hibernate Tools 3.4.0.CR1 -->
  5. <hibernate-mapping>
  6. <class name="com.akwolf.bean.Wife" table="WIFE">
  7. <id name="id" type="int">
  8. <column name="ID" />
  9. <generator class="native" />
  10. </id>
  11. <property name="name" type="java.lang.String">
  12. <column name="NAME" />
  13. </property>
  14. </class>
  15. </hibernate-mapping>
Annotation雙向必設mappedBy

3、雙向主鍵


4、雙向外鍵

現在在wife添加一個Husband的屬性使其可以找到husband,則需在Wife.hbm.xml中進行配置

[html]
  1. <hibernate-mapping>
  2. <class name="com.akwolf.bean.Wife" table="WIFE">
  3. <id name="id" type="int">
  4. <column name="ID" />
  5. <generator class="native" />
  6. </id>
  7. <property name="name" type="java.lang.String">
  8. <column name="NAME" />
  9. </property>
  10. <one-to-one name="husband" property-ref="wife"></one-to-one>
  11. </class>
  12. </hibernate-mapping>
對於property-ref="wife",就是指明要進行關聯的屬性已經在husband的wife屬性進行關聯了

從wife端查詢husband時,hibernate生成的查詢語句

[java]
  1. Hibernate:
  2. select
  3. wife0_.ID as ID1_1_,
  4. wife0_.NAME as NAME1_1_,
  5. husband1_.ID as ID0_0_,
  6. husband1_.NAME as NAME0_0_,
  7. husband1_.AGE as AGE0_0_,
  8. husband1_.WIFE as WIFE0_0_
  9. from
  10. WIFE wife0_
  11. left outer join
  12. HUSBAND husband1_
  13. on wife0_.ID=husband1_.WIFE
  14. where
  15. wife0_.ID=?
Copyright © Linux教程網 All Rights Reserved