hibernate 联系关系配置之一对多

hibernate 关联配置之一对多

一对多是比较普遍的映射关系,比如班级与同学关系,消费者预订单关系,某个人的留言......

一对多:从班级的角度来看一个班级可以有很多个同学。

多对一:从学生的角度来看多个同学可以对应一个班级。

根据实际情况也有不同的映射方式:

一."一方"的java类中含有"多方"对象的set集合,而"多方"的java类中含有"一方"的ida而不是一个对象。

    java类图:
hibernate 联系关系配置之一对多

    数据库表设计,在message表中定义一个外键关联student:

  
hibernate 联系关系配置之一对多

 

student.hbm.xml中:

    <!--
           将 lazy 设置为false 表面查询一个student的时候查询该student的所有message
           laze 默认为 true
       -->

  

<set name="messages" lazay="false">
          <key column="stu_id"></key>
          <one-to-many class="showGoal.model.Target"/>

   </set>

 

 

message.hbm.xml中无需特别指定。

 

二."一方"的java类中含有"多方"对象的set集合,而"多方"的java类中含有"一方"的i一个对象。

    java类图:

  
hibernate 联系关系配置之一对多
  
数据库表的设计不变:

 
hibernate 联系关系配置之一对多
  student.hbm.xml:

  同上:  

   <set name="messages" lazay="false">
          <key column="stu_id"></key>
          <one-to-many class="showGoal.model.Target"/>
   </set>

  message.hbm.xml:

 

<many-to-one name="student"   class="xxx.student" 
                         column="stu_id" cascade="save-update">
</many-to-one>   

 

  三.这种情况比较特殊就是自身的一对多关联。比如message与message的回复,就是自身的一对多关联

    

<set name="messagesReply" cascade="all" inverse="true">
       <key column="id"></key>
       <one-to-many class="xxxx.Message"/>
</set>
            
<many-to-one name="parentMeeage" class="xxxs.Category" column="parent_id">
</many-to-one>

 

   

注:1.<set>元素的lazy属性,默认为true。表示加载student 的时候不会加载student的message集合。

                    false,则相反。

        2.<set>元素的cascade属性:

         是用来说明数据库中两个表之间相互关系(一对一,一对多,多对多)中,当对主对象进行某种操作时,  是 否对其关联的从对象也作类似的操作(比如有对象 Department和Employee,它们之间是一对多的关系,当保存Department时,其对应的Employee是否也相应的保存),常见的 级联(Cascade)有:

       (1)none:在保存,删除或修改当前对象时,不对其附属对象(关联对象)进行级联操作。它是默认值。
       (2)save-update:在保存,更新当前对象时,级联保存,更新附属对象(临时对象,游离对象)。
       (3)delete:在删除当前对象时,级联删除附属对象。
       (4)all:所有情况下均进行级联操作,即包含save-update和delete等等操作。
       (5)delete-orphan:删除此对象的同时删除与当前对象解除关系的孤儿对象(仅仅使用于一对多关联关系 中)。

       当然也可以在数据库中定义外键的时候设置删除时,更新时相应的操作来等效的实现cascade的操作

 

   小生菜鸟一个,如果大神们对博客有什么意尽管说出来,虚心接受。我会很高兴的哦hibernate 联系关系配置之一对多 谢了