hibernate中多对一和一对多关联入门

在域模型模型中关联关系的表现形式主要有:
   1、一对多的单向关联;
   2、多对一的单向关联;
   3、一对多的双向关联;
而在关系型数据库中,由于只存在外键参照关系
且总是由“many”的一方参照"one"的一方,这就决定
了关系数据库实际上只支持多对一或一对一的单向关联。
这样的好处是可以消除数据的冗余。
--------------------------------------------
建立多对一的单向关联关系
假如有如下关系模型
OBJECT_As table                           OBJECT_Bs table
-----------------                      ---------------------
ID  <PK>    <----------------------------OBJECT_A_ID <FK>
OBJECT_A_ATTRS                           ID  <PK>
                                         OBJECT_B_ATTRs

这里建立OBJECT_B到OBJECT_A的多对一单向关联,为了表明他们之间的这种关系
在OBJECT_B的OBJECT_B_ATTRs属性集合中需要有一个为OBJECT_A类型<obj_A>。而OBJECT_A
的属性集合则只需要与表OBJECT_As的属性集合对应即可。
同时需要注意的是在OBJECT_B类中需要有对应类型为OBJECT_A的get/set方法。
在持久化描述文件中我们可以描述OBJECT_B.hbm.xml存在的这种关系如下:
   <many-to-one
      name="obj_A" 
      column="OBJECT_A_ID"
      class="The full name of OBJECT_A"
      not-null="true"
      ...
      Other attributes List
   /> 
当然现在有多种可选择的工具来方便的生成*.hbm.xml格式的描述文件XDoclet是一个不错的选择。
如果我们是从*.hbm.xml开始的,则可以使用hbm2java来方便的生成POJO类  。我们可以使用hbm2ddl
来生成SQL脚本文件。
----------------------------------------------------------------
下面介绍一对多双向关联
我们依旧沿用上面的模型,假如现在需要收集和OBJECT_A对应的所有OBJECT_B对象,我们可以在
OBJECT_A类中加入如下属性Set object_Bs来存放和OBJECT_A的ID对应的OBJECT_B对象。然后在
OBJECT_A类中加入get/setObject_Bs()方法。
这样我们只须在上面的模型中的OBJECT_A.hbm.xml加入如下描述就可以建立这种一对多双向关联。
    <set name="object_Bs"
         cascade="save-update"
    >
       <key column="OBJECT_A_ID"/>
       <one-to-many class="The full name of OBJECT_B"/>
    </set> 
这样就算完成了,需要注意在书写描述文件时根据需要取舍not-null和cascade属性并为其合理取值,
他们的本质概念和关系数据库的非空约束和级联操作相同。     
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值