随笔 - 6  文章 - 129  trackbacks - 0
<2024年4月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

常用链接

留言簿(14)

随笔档案(6)

文章分类(467)

文章档案(423)

相册

收藏夹(18)

JAVA

搜索

  •  

积分与排名

  • 积分 - 815441
  • 排名 - 49

最新评论

阅读排行榜

评论排行榜

  多对多只有双向关系(如果添加一张辅助表来存储多对多的单向关系也可以,但是不值得
这么做,因为多对多的单向关系可以用多对一或者一对多的半向关系来表达,不必要添加一张
辅助表),如学生与课程之间,一个学生对应多个课程,一个课程也可以被多个学生选择。

Student.hbm.xml
...
<hibernate-mapping>
 <class name="model.Student" table="student">
  <id name="id" unsaved-value="null">
   <generator class="uuid.hex"/>
  </id>
  <property name="name" type="string"/>
  <set name="courses"
    table="student_course"
    cascade="save-update"
  >
    <key column="stu_id"/>
    <many-to-many class="model.Course
      column="course_id"/>
  </set>

 <class>
</hibernate-mapping>
多对多关系需要配置的属性比较多一些。初学者经常会把<key column=""/>和<column="">的值
弄反了,其实只要记住一个原则:<key column="">总是和本身类的主键id对应,而<column="">
总是与关联类的主键id相对应。对于上面的Student.hbm.xml,关联类是Course,本身类则是Student

Course.hbm.xml
...
<hibernate-mapping>
 <class name="model.Course" table="course">
  <id name="id" unsaved-value="null">
   <generator class="uuid.hex"/>
  </id>
  <propery name="name" type="string"/>
  <set name="students"
    table="student_course"
    cascade="save-update"
    >
    <key columm="course_id"/>
    <many-to-many class="model.Student"
      column="stu_id"/>
  </set>

 </class>
</hibernate-mapping>
注意:Student与Course的cascade都设置为save-update,在多对多的关系中,all,delete等
cascade是没有意义的,因为多对多关系中,并不能因为父对象被删除,而造成被包括的子对象
被删除,因为可能还有其他的父对象参考了这个子对象。

另外,在多对多关系中,如果双方都有控制权(也就是双方都没有设置inverse="true"),则
双方都要把关联关系反映到数据库。必须在某一方设置inverse="true",然后在执行语句时使用
主控方进行操作(也就是没有设置inverse="true"的那一方)。



posted on 2007-12-29 15:01 Ke 阅读(1981) 评论(0)  编辑  收藏 所属分类: hibernate

只有注册用户登录后才能发表评论。


网站导航: