標籤:des style blog http io ar color os sp
hibernate.hbm.xml 配置總結
大部分內容取自: 【Hibernate總結系列】....hbm.xml配置
- 基本配置結構
-
1 <?xml version="1.0" encoding=‘UTF-8‘?> 2 <!DOCTYPE hibernate-mapping PUBLIC 3 "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 4 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" > 5 <hibernate-mapping package="包名"> 6 <class name="類名" table="表名"> 7 <id name="主鍵在java類中的欄位名" column="對應表中欄位" type="類型 "> 8 <generator class="主鍵建置原則"/> 9 </id>10 ……11 </class>12 </hibernate-mapping>
- 主鍵(id)
-
1 <id name="id" column="id" type="java.lang.Integer">2 <generator class="native"/> <!-- 建置原則,看2-->3 </id>
- Hibernate物件識別碼建置原則
- 普通屬性(property)
- 常用屬性:
-
1 name(對應的java類的屬性名稱)2 column(對應的表中的欄位)3 tyope(屬性的類型,eg.java.lang.String)4 not-null(設定該屬性是否為空白,為true時表示非空,預設為false5 length(欄位的長度限制)
-
1 Eg1. <property name="accessname" column="accessName" type="java.lang.String" not-null="true" />2 Eg2. <property name="state" column="state" type="java.lang.Byte" not-null="true" />3 Eg3. <property name="description" column="description" type="java.lang.String" />
- 一對多關聯性(<many-to-one…/>和<set…></set>)
- 介紹:
-
1 一對多關聯性一般是用在一個表與另一個表存在外部索引鍵關聯的時候,例如使用者表的組織id與組織表存在外部索引鍵關聯,則“一”方為組織表,“多”方為使用者表,因為一個組織可以包含多個使用者,而一個使用者只能隸屬於一個組織。2 對於存在一對多關聯性和多對一關聯性的雙方,需要在…hbm.xml中進行相應配置,這時在“一”方(例如:組織)需要在對應檔中添加<set…></set>元素,因為它包含多個“多”方的對象,
- 一般的格式如下:
-
1 <set name="java映射類中對應的屬性" inverse="true" lazy="true"> <!--inverse: 負責控制關係,一般放在一的一方-->2 <key column="表中對應欄位"/>3 <one-to-many class="多方的類"/>4 </set>
Inverse:負責控制關係,預設為false,也就是關係的兩端都能控制,但這樣會造成一些問題,更新的時候會因為兩端都控制關係,於是重複更新。一般來說有一端要設為true。
Cascade:負責控制關聯對象的級聯操作,包括更新、刪除等,也就是說對一個對象進行更新、刪除時,其它對象也受影響,比如我刪除一個對象,那麼跟它是多對一關聯性的對象也全部被刪除。
舉例說明區別:刪除“一”那一端一個對象O的時候,如果“多”的那一端的Inverse設為true,則把“多”的那一端所有與O相關聯的對象外鍵清空;
如果“多”的那一端的Cascade設為Delete,則把“多”的那一端所有與O相關聯的對象全部刪除。
-
1 Eg.
<set name="userSet" inverse="true" lazy="true"> 2 <key column="orgId"/>3 <one-to-many class="User"/>4 </set>
- “多”方(例如:使用者)隸屬於一個“一”方對象,一般的格式如下:
-
1 <many-to-one name="java映射類中對應的屬性" column="表中對應欄位" class="類名" not-null="true" />
-
1 Eg. <many-to-one name="org" column="orgId" class="Organization" not-null="true" />
- 一對一關聯性(<one-to-one…/>)
-
1 一對一關聯性相對一對多關聯性來說比較少見,但也在某些情況下要用到,例如有一個使用者的基本資料表(USER)和一個使用者的密碼錶(PASSWD)就存在一對一的關係。下面來看一下一對一關聯性在Hibernate的配置。
- 其中主表(eg. 使用者的基本資料表)的配置如下:
-
1 <one-to-one name="主表對象中子表對象的屬性名稱" class="子表對象的類名" cascade="save-update"/>
-
1 Eg. <one-to-one name="password" class="com.amigo.dao.pojo.Passwd" cascade="save-update"/>
- 子表(eg. 使用者的密碼錶)的配置如下:
-
1 <one-to-one name="子表對象中主表對象的屬性名稱" class="主表對象的類名" constrained="true" />
-
1 Eg. <one-to-one name="user" class="com.amigo.dao.pojo.User " constrained="true" />
- 多對多關係(<many-to-many…/>)
-
1 介紹: 在資料庫設計時,一般將多對多關係轉換為兩個一對多(或多對一)關係,例如在基於角色的許可權系統中,使用者和角色存在的關係就是典型的多對多關係,即一個使用者可以具有多個角色,而一個角色又可以為多個使用者所有,一般在設計時,都會加一個使用者與角色的關聯表,該表與使用者表以及角色表都存在外部索引鍵關聯。
- 設定格式如下:
-
1 <set name="java對象的屬性名稱" table="表名" cascade="all" outer-join="false"> 2 <key column="表的對應欄位"/> 3 <many-to-many class="另一個表的對象類" column="另一個表的欄位"/> 4 </set>
- Eg. 上述的多對多關係可以表示為:
- t_user方:
-
1 <set name="roleSet" table="t_user" cascade="all" outer-join="false"> 2 <key column="roleId"/> 3 <many-to-many class="com.amigo.dao.pojo.Role" column="roleId"/> 4 </set>
- t_role方:
-
1 <set name="userSet" table="t_role" cascade="all" outer-join="false"> 2 <key column="roleId"/> 3 <many-to-many class="com.amigo.dao.pojo.User" column="roleId"/> 4 </set>
hibernate.hbm.xml 配置總結