引言
之前對于hibernate中幾種關系映射的編寫甚是頭疼啊,在這個項目中學習了一個比較好用的技巧,小編在此總結和分享,從而可以更好的加深自己對這個幾種關系映射的印象。
西面以這三個實體的關系為例進行總結:

下面先看一下幾個實體的映射文件的內容:
Department.hbm.xml
<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping package="cn.itcast.oa.domain"> <class name="Department" table="itcast_department"> <id name="id"> <generator class="native" /> </id> <PRoperty name="name" /> <property name="description" /> <!-- users屬性,本類與User類 的 一對多 的關系 --> <set name="users"> <key column="departmentId"></key> <one-to-many class="User" /> </set> <!-- parent屬性,本類與Department(上級)的 多對一 的關系 --> <many-to-one name="parent" class="Department" column="parentId"></many-to-one> <!-- children屬性,本類與 Department(下級) 的 一對多的關系 --> <set name="children" cascade="delete" order-by="id ASC"> <key column="parentId"></key> <one-to-many class="Department" /> </set> </class></hibernate-mapping> User.hbm.xml<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping package="cn.itcast.oa.domain"> <class name="User" table="itcast_user"> <id name="id"> <generator class="native" /> </id> <property name="loginName" /> <property name="passWord" /> <property name="name" /> <property name="gender" /> <property name="phoneNumber" /> <property name="email" /> <property name="description" /> <!-- department屬性,本類與Department類的 多對一 的關系 --> <many-to-one name="department" class="Department" column="departmentId"></many-to-one> <!-- roles屬性,本類與Role類的 多對多 的關系 --> <set name="roles" table="itcast_user_role" lazy="false" > <key column="userId"></key> <many-to-many class="Role" column="roleId"></many-to-many> </set> </class></hibernate-mapping>
<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping package="cn.itcast.oa.domain"> <class name="Role" table="itcast_role"> <id name="id"> <generator class="native" /> </id> <property name="name" /> <property name="description" /> <!-- users屬性,本類與User類的 多對多的 關系 --> <set name="users" table="itcast_user_role"> <key column="roleId"></key> <many-to-many class="User" column="userId"></many-to-many> </set> <!-- privileges屬性,本類與Privilege類的 多對多的關系 --> <set name="privileges" table="itcast_role_privilege" lazy="false"> <key column="roleId"></key> <many-to-many class="Privilege" column="privilegeId"></many-to-many> </set> </class></hibernate-mapping> 先給出幾種關系編寫模型多對一: <many-to-one name="" class="" column=""></many-to-one> 一對多(Set): <set name=""> <key column=""></key> <one-to-many class=""/> </set> 多對多(Set): <set name="" table=""> <key column=""></key> <many-to-many class="" column=""></many-to-many> </set>第一、寫注釋(有規則)以department中的uers屬性為例
<!-- users屬性,本類與User的一對多 --> 格式:?屬性,本類與?的? ?1 屬性名 ?2 關聯的類型 ?3 關系這樣大家在看看上面映射文件中幾種關系的說明都是這樣的格式第二、將對應的空的類型模板復制到對應的注釋下面
第三步、填空
將注釋(注釋要按照要求來寫)中
xxx屬性中的xxx當做name的值。
本類與yyy類中的yyy當做class的值
下面是填充column的規則,分為兩組 一對多與多對一是一組,多對多是一組。
多對一與一對多,這種不需要中間表,將“一”的一方的實體的名稱首字母小寫然后后面加上Id,將這個值分別作為這一組的column的值。比如下面的例子
下面在介紹多對多的編寫規則,因為這種關系需要中間表,也就是模板中的table的值,這個值我選用的規則是:項目名稱_實體1的name_實體2的name ,比如user與role的關系中間表名稱為:itcast_user_role。對于name和calss的填寫規則還是按照上面的規則來填寫。
關于column的填寫規則是將本實體的名稱+Id,放在自己的映射文件的<key column=""></key>這個column的位置上,并且復制到對方的<many-to-many class="" column=""></many-to-many>這個位置一份。這兩個值必須一樣。舉個例子
小結
上面就是小編對于編寫hibernate映射文件中幾種關系的小技巧,可能在語言描述上面有一些不清楚,但是大家可以結合這其中的例子來進行描述。歡迎大家有什么更好的編寫技巧來共勉!
新聞熱點
疑難解答