Hibernate 数据关联

一对一关联(包括两种类型)

1、主键关联

2、唯一外键关联

一个典型实例:中国公民只允许有一张身份证. 以T_User 和T_Idcard为例

 T_User(                                            id   int   <pk,fk2> ,

         name   varchar(50) ,

         age   int

) ;

  T_Idcard(

        id    int <pk> ,

        serial   varchar(30) ,

        expiry  int

) ;

通过one-to-one节点进行声明

TUser.hbm.xml

<one-to-one  name="idcard"                        一对一映射节点

         class="com.gjun.vo.Idcard"        

         cascade="all"           级联关系

/>

级联(cascade)在Hibernate关系中是个非常重要概念.它指的是当主控方执行操作时,关联对象(被控方)是否同步执行同一操作.

TIdcard.hbm.xml

<id name="id" column="id">

     <generator class="foreign">   foreign主键生成

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

    </generator>

</id>

<one-to-one   name="user"                          一对一映射节点

               class="com.gjun.vo.User"

               constrained="tue"      约束

/>

---------------------------------------------------------------------------------------------------------------------------------------------------------

双向一对多关联

实例:一个用户拥有办公办公室地址,家庭地址等多个地址属性.

TUser.hbm.xml

<set   name="addresses"

          inverse="true"      控制方向反转 

          lazy="false" cascade="all">

     <key column="user_id">    

    </key>

    <one-to-many class="com.gjun.vo.Address"/>

</set>

TAddress.hbm.xml

<many-to-one  name="user"

                         class="com.gjun.vo.User"

                         cascade="none"

                         column="user_id"

                         not-null="true"

/>

------------------------------------------------------------------------------------------------------------------------------------------------------------------

一对多双向自关联
同一个类既扮演了one的角色,又扮演了many的角色。典型的应用案例就是一个种类分层模型。

商品分类表(ProductType):

  id    int(11)   <pk> ID号          -----自身外键参照

  parent_id    int(11)  <fk>  父类ID号

  cate_no       varchar(50)   类别编码

  cate_name   varchar(50)   类别名称

 

实体类:

  id :  Integer

  parent : ProductType

  childs  : Set

  cateNo : String

  cateName : String

 

<hibernate-mapping>

    <class  name="com.gjun.vo.ProductType"   table="ProductType">

              <id    name="id"  type="integer"  column="ID">

                         <generator  class="identity" />

             </id>

             <many-to-one  name="parent"

                                      column="PARENT_ID"

                                      class="com.gjun.vo.ProductType"

                                      lazy="false"/>

            <set  name="childs"

                     cascade="all"

                     lazy="false"

                     inerse="true">

              <key  column="PARENT_ID"  />

             <one-to-many  class="com.gjun.vo.ProductType" />

</hibernate-mapping>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值