1、映射組成關係
<hibernate-mapping package="com.ORM"> <class name="Clients" table="clients"> <id name="id" column="ID" type="integer"> <generator class="identity"/> </id> <property name="clientname" column="CLIENTNAME" type="string" /> <property name="linkman" column="LINKMAN" type="string" /> <property name="phone" column="PHONE" type="string" /> <!--映射Clients與Address之間的組成關係--> <component name="address" class="com.ORM.Address"> <parent name="client"/> <property name="province" column="PROVINCE" type="string" /> <property name="city" column="CITY" type="string" /> <property name="street" column="STREET" type="string" /> <property name="zipcode" column="ZIPCODE" type="string" /> </component> </class></hibernate-mapping>
如上注意黑體字的配置非常重要。
2、Hibernate的集合映射
<hibernate-mapping package="com.ORM"> <class name="Items" table="items"> <id name="id" column="ID" type="integer"> <generator class="identity"/> </id> <property name="itemno" column="ITEMNO" type="string" /> <property name="itemname" column="ITEMNAME" type="string" /> <!--映射Set類屬性videos--> <set name="videos" table="videos" lazy="false"> <key column="ITEMS_ID"/> <element column="VIDEO" type="string" not-null="true"/> </set> <!--映射List類屬性tips 會將所有相關items的東西都載入進來--> <list name="tips" table="tips" lazy="false"> <key column="ITEMS_ID"/> <index column="POSITION"/> <element column="TIP" type="string"/> </list> <!--映射Map類屬性picture--> <map name="picture" table="picture" lazy="false"> <key column="ITEMS_ID"/> <index column="KEYNAME" type="string"/> <element column="PICTURE" type="string"/> </map> </class></hibernate-mapping>
3、多對多的關係
<hibernate-mapping package="com.ORM"> <class name="Orders" table="orders"> <id name="id" column="ID" type="integer"> <generator class="identity"/> </id> <property name="orderno" column="ORDERNO" type="string" /> <property name="money" column="MONEY" type="double" /> <!--映射Orders到Items的多對多單向關聯--> <set name="items" table="selecteditems" lazy="true" cascade="save-update"> <key column="ORDERID" /> <many-to-many class="com.ORM.Items" column="ITEMID" /> </set> </class></hibernate-mapping>
//由於在Orders.hbm.xml中lazy="true"採用了延遲檢索策略,因此在這裡特意初始化一下Hibernate.initialize(order.getItems());
<hibernate-mapping package="com.ORM"> <class name="Items" table="items"> <id name="id" column="ID" type="integer"> <generator class="identity"/> </id> <property name="itemno" column="ITEMNO" type="string" /> <property name="itemname" column="ITEMNAME" type="string" /> <!--映射Items到Orders的多對多單向關聯--> <set name="orders" table="selecteditems" lazy="true" inverse="true" cascade="save-update"> <key column="ITEMID"/> <many-to-many class="com.ORM.Orders" column="ORDERID"/> </set> </class></hibernate-mapping>
<hibernate-mapping package="com.ORM"> <class name="Orders" table="orders"> <id name="id" column="ID" type="integer"> <generator class="identity"/> </id> <property name="orderno" column="ORDERNO" type="string" /> <property name="money" column="MONEY" type="double" /> <!--映射Orders到Items的多對多單向關聯--> <set name="items" table="selecteditems" lazy="true" cascade="save-update"> <key column="ORDERID"/> <many-to-many class="com.ORM.Items" column="ITEMID"/> </set> </class></hibernate-mapping>
4、一對多關聯性
(1)映射一對多單身關聯
<hibernate-mapping package="com.ORM"><class name="Orders" table="orders"><id name="id" column="ID" type="integer"><generator class="identity" /></id><property name="orderno" column="ORDERNO" type="string" /><property name="money" column="MONEY" type="double" /><!--映射orders到customer的多對一單向關聯 --><many-to-one name="customer" column="CUSTOMER_ID" class="com.ORM.Customer"lazy="false" not-null="true" /></class></hibernate-mapping>
(2)映射一對多雙向關聯關係
<hibernate-mapping package="com.ORM"><class name="Customer" table="customer"><id name="id" column="ID" type="integer"><generator class="identity" /></id><property name="cname" column="CNAME" type="string" /><property name="bank" column="BANK" type="string" /><property name="phone" column="PHONE" type="string" /><!--映射customer到orders的一對多關聯 --><set name="orders" cascade="all" lazy="false" inverse="true"><key column="CUSTOMER_ID" /><one-to-many class="com.ORM.Orders" /></set></class></hibernate-mapping>
<hibernate-mapping package="com.ORM"><class name="Orders" table="orders"><id name="id" column="ID" type="integer"><generator class="identity" /></id><property name="orderno" column="ORDERNO" type="string" /><property name="money" column="MONEY" type="double" /><!--映射orders到customer的多對一關聯 --><many-to-one name="customer" column="CUSTOMER_ID" class="com.ORM.Customer"lazy="false" not-null="true" /></class></hibernate-mapping>
(3)映射一對多雙向自身關聯關係
<hibernate-mapping package="com.ORM"><class name="Goodscate" table="goodscate"><id name="id" column="ID" type="integer"><generator class="identity" /></id><property name="cateNo" column="CATE_NO" type="string" /><property name="cateName" column="CATE_NAME" type="string" /><!--映射子類別到父系類別的多對一關聯 --><many-to-one name="parent" class="com.ORM.Goodscate"column="PARENT_ID" lazy="false" /><!--映射父系類別到子類別的一對多關聯 --><set name="childs" cascade="all" lazy="false" inverse="true"><key column="PARENT_ID" /><one-to-many class="com.ORM.Goodscate" /></set></class></hibernate-mapping>
5、一對一的關係
一對一關聯關係的實現方式有兩種:
(1)共用主鍵方式
(2)唯一外鍵方式
(1)
<hibernate-mapping package="com.ORM"><class name="Company" table="company"><id name="id" column="ID" type="integer"><generator class="identity" /></id><property name="companyname" column="COMPANYNAME" type="string" /><property name="linkman" column="LINKMAN" type="string" /><property name="telephone" column="TELEPHONE" type="string" /><property name="email" column="EMAIL" type="string" /><!--映射Company與Login的一對一關聯 --><one-to-one name="login" class="com.ORM.Login" cascade="all"lazy="false" outer-join="true" /></class></hibernate-mapping>
<hibernate-mapping package="com.ORM"><class name="Login" table="login"><id name="id" column="ID" type="integer"><generator class="foreign"><param name="property">company</param></generator></id><property name="loginname" column="LOGINNAME" type="string" /><property name="loginpwd" column="LOGINPWD" type="string" /><!--映射Company與Login的一對一關聯 --><one-to-one name="company" class="com.ORM.Company"constrained="true" /></class></hibernate-mapping>
唯一外鍵方式
<hibernate-mapping package="com.ORM"><class name="Client" table="client"><id name="id" column="ID" type="integer"><generator class="identity" /></id><property name="clientname" column="CLIENTNAME" type="string" /><property name="phone" column="PHONE" type="string" /><property name="email" column="EMAIL" type="string" /><!--映射Client到Address的單向一對一關聯 --><many-to-one name="address" class="com.ORM.Address" lazy="false"cascade="all" unique="true" column="address" /></class></hibernate-mapping>
<hibernate-mapping package="com.ORM"><class name="Address" table="address"><id name="id" column="ID" type="integer"><generator class="identity" /></id><property name="province" column="PROVINCE" type="string" /><property name="city" column="CITY" type="string" /><property name="street" column="STREET" type="string" /><property name="zipcode" column="ZIPCODE" type="string" /><!--映射Client與Address的雙向一對一關聯 --><one-to-one name="client" class="com.ORM.Client"property-ref="address" /></class></hibernate-mapping>