`
lijun87
  • 浏览: 263595 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Hibernate关系映射简介

阅读更多

Hibernate关系映射简介

Hibernate关系映射备忘录,以下为一对一 一对多 多对多 映射xml文件的简单记录

一对多映射
使用的表:Customers表   ID   Name
          Orders表   ID   Customer_ID   Order_Number //orders中的Customer_ID作为外键使用。

单向映射文件

********************Customers表**********************************
<hibernate-mapping>
<class name="GT.Cutstomer" table="Customers">
  <id name="id" type="long" column="ID">
    <generator class="increment"/>
  </id>
<property name="Name" type="string">
<column name="Name" legnth="15">
<property/>
</class>
</hibernate-mapping>
********************Orders表**********************************
  <hibernate-mapping>
<class name="GT.Order" table="Orders">
<id name="id" type="long" column="ID">
<generator class="increment"/>
</id>
<property name="OrderNumber" type="string">
<column name="Order_Number" legnth="15">
<property/>

<many-to-one
name="customer"
column="Customer_ID"
class="GT.Customer"
not-null="true" />
</class>
</hibernate-mapping>
双向映射文件
********************Customers表**********************************
  <hibernate-mapping>
<class name="GT.Cutstomer" table="Customers">
<id name="id" type="long" column="ID">
<generator class="increment"/>
</id>
<property name="Name" type="string">
<column name="Name" legnth="15">
<property/>

<set name="orders" cascade="" inverse="true">  
<key column="Customer_ID"/>
</set>
</class>
</hibernate-mapping>
//双向关联中,set中的inverse 属性表明此端(customer)的关联只是order端的镜像,当探测到customer和order同时发生变化时,仅按照order端来同步数据库
********************Orders表**********************************
  <hibernate-mapping>
<class name="GT.Order" table="Orders">
<id name="id" type="long" column="ID">
<generator class="increment"/>
</id>
<property name="OrderNumber" type="string">
<column name="Order_Number" legnth="15">
<property/>

<many-to-one
name="customer"
column="Customer_ID"
class="GT.Customer"
not-null="true" />
</class>
</hibernate-mapping>



一对一映射
Hibernate提供了两种一对一关联映射的方法:按照外键映射,按照主键映射。且这里说的是双向映射
按照外键映射
使用的表
Customers表 ID Name Home_Address_Id Com_Address_Id
Addresses表 ID City .....
********************Customers表**********************************
  <hibernate-mapping>
<class name="GT.Cutstomer" table="Customers">
<id name="id" type="long" column="ID">
<generator class="increment"/>
</id>
<property name="Name" type="string">
<column name="Name" legnth="15">
<property/>
<many-to-one name="homeAddress"
class="GT.Address"
column="Home_Address_ID"
unique="true" />
<many-to-one name="comAddress"
class="GT.Address"
column="Com_Address_ID"
unique="true" />
</class>
</hibernate-mapping>  
Address.hbm.xml文件中,用<one-to-one>来映射Address类的customer属性
........................

<one-to-one name="Customer"
class="GT.Customer"
property-ref = "homeAddress" />  
........................


按照主键映射

使用的表
Customers表 ID Name
Addresses表 ID City .....
Customer.hbm.xml文件中
********************Customers表**********************************
................

<one-to-one name="address"
class="GT.address"
cascade="all"/>  
.......................

********************Address表**********************************
Address.hbm.xml文件中
.......................

<one-to-one name="customer"
class="GT.customer"
constrained="true"/>   表明address的主键同时作为外间使用
.......................


多对多映射
使用的表
Category表     ID Name
Items表       ID Name Base_Price
Category_Item表   Catetory_ID Item_ID
单向映射

********************Category表**********************************
Category.hbm.xml文件中
.........................

<set name="items" talbe="Category_Item"
lazy="true"
cascade="save-update"
<key column="Category_ID"/>
<many-to-many class"GT.Item" column="Item_ID"/>
</set>

.....................


双向映射
********************Category表**********************************

Category.hbm.xml文件中
.........................

<set name="items" talbe="Category_Item"
lazy="true"
cascade="save-update"
<key column="Category_ID"/>
<many-to-many class"GT.Item" column="Item_ID"/>
</set>
.........................



********************Item表**********************************

Item.hbm.xml文件中
.........................

<set name="categories" talbe="Category_Item"
lazy="true"
inverse="true"
cascade="save-update"
<key column="Item_ID"/>
<many-to-many class"GT.Category" column="Category_ID"/>
</set>

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics