hibernate实体关系

1、一对一关系

数据库中的一对一设计分两种形式:

(1)      外键关联:一个表中添加一个字段作为外键,值是与其相对应一对一关系表的主键值。

(2)      主键关联:两张一对一关系的表共用一个主键,主外键是一个字段。

 

在实体关系中

(1)      单向关联,在任意一个实体类中添加另一个实体类型的属性

(2)      双向关联,在两个实例类中都添加另一个实体类型的属性

 

映射文件的配置:

针对数据库一对一的第一种形式(外键关联):

单向关联:

主表映射文件不变

附表中使用<many-to-one>

<many-to-one  name=" "  class=" "  column=" "  unique="true"/>

name:主表名

class:主表实体类的完全路径

column:附表中外键字段名(取值为主表的主键值)

unique:值得唯一性,此处必须设置为true

 

双向关联:

主表中用<one-to-one>指定property-ref的值,附表中用<many-to-one>

主表:

<one-to-one  name=""  class=" "  property-ref =" "/>

name:附表名

class:附表实体类的完全路径(例:com.baidu,domain.person)

property-ref:主表名

这个标签的含义是:name(附表)引用了property-ref(主表)的主键作为它的外键

 

 

附表:

<many-to-one  name=" "  class=" "  column=" "  unique="true"/>

name:主表名

class:主表实体类的完全路径

column:附表中外键字段名(取值为主表的主键值)

unique:值得唯一性,此处必须设置为true

 

针对数据库一对一的第二种形式(主键关联):

单向关联:

主表映射文件不变

附表中id属性generator的使用变化,<one-to-one>使用

附表:

<id name=""column="" >

<generator class=" foreign">

< param name="property">xxx</param>

</generator>

</id>

name:主表的主键名

column:附表的外键也是主键的名称

generator的class值改为foreign指定param的值为主表的表名称(xxx)

 

<one-to-onename="room" class="cn.zc.domain.Room" constrained="true"/>

name:附表实体类中主表实体类型的私有属性名

class: 主表实体类型属性的完全路径(例:com.baidu,domain.person)

constrained:必须是“true”,以告知hibernate当前表主键上存在一个约束:附表引用了主表的主键

双向关联:

主表使用<one-to-one>,附表附表中id属性generator的使用变化

主表:

<one-to-one name=”” classs=””/>

name:附表的实体类型即主表类型实体的私有属性值

class:附表实体类型属性的完全路径(例:com.baidu,domain.person)

附表:

<id name=""column="" >

<generator class=" foreign">

< paramname="property">xxx</param>

</generator>

</id>

name:主表的主键名

column:附表的外键也是主键的名称

generator的class值改为foreign指定param的值为主表的表名称(xxx)

2、多对一关系、一对多关系

数据库中一对多关系表现:

多的一方添加一个字段作为外键,字段的值是一的那一方的主键值。

 

在实体关系中:

(1)      单向关联:多的一方设置一个私有属性,该属性是一的那一方的引用

(2)      双向关联:在单向关联的基础上,一的那一方添加一个集合set,类型是多的一方的引用(set<多的一方类型>)

 

实体映射文件配置:

单向关联:

主表不变、附表使用<many-to-one>

附表:

<many-to-onename="sort" class="Sort" column="sort_id">

name:附表中主表类型引用名

class:主表实体类的完全路径(例:com.baidu,domain.person)

column:附表中外键字段名

 

双向关联:

主表使用<set>,附表使用<many-to-one>

主表:

<setname="items">

<keycolumn="orderid"></key>

<one-to-manyclass="Item"/>

</set>

name:set集合名

<key column="">column:

附表:

<many-to-onename="sort" class="Sort" column="sort_id">

name:附表中主表类型引用名

class:主表实体类的完全路径(例:com.baidu,domain.person)

column:附表中外键字段名

 

3、多对多关系

       一般多对多关联会拆分成两个一对多的关系来实现多对多关系。

   Hibernate的实现方式是通过中间表间接的实现了多对多关系,实际上也是将

   多对多拆分成两个双向的一对多关系。

   中间表是没有实体类的。

  

   配置文件:

  

   单向关联:

   表一:

   <set name="" table=" ">

   <key column=""></key>

   <many-to-many class=""column=""/>

   </set>

   name:表一中私有属性表二实体类型对象

   table:中间表名

   <key column=""></key>

   column:表一主键在中间表对应的字段名

   <many-to-many class="" column=""/>

   class:表二对应实体类

   column:表二主键在中间表对应的字段名

   双向关联:

   表一:

   <set name="" table=" ">

   <key column=""></key>

   <many-to-many class=""column=""/>

   </set>

   name:表一中私有属性表二实体类型对象

   table:中间表名

   <key column=""></key>

   column:表一主键在中间表对应的字段名

   <many-to-many class=""column=""/>

   class:表二对应实体类

   column:表二主键在中间表对应的字段名

      

       表二:

   <set name="" table=" ">

   <key column=""></key>

   <many-to-many class=""column=""/>

   </set>

   name:表二中私有属性表一实体类型对象

   table:中间表名

   <key column=""></key>

   column:表一主键在中间表对应的字段名

   <many-to-many class=""column=""/>

   class:表一对应实体类

   column:表一主键在中间表对应的字段名

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值