hibernate 一对多关系映射 笔记

来源:互联网 发布:网络还原精灵 编辑:程序博客网 时间:2024/06/04 18:07

hibernate 一对多关系映射(单向classes--->student)

一对多映射原理,利用了多对一映射原理

多对一映射原理:在多的一端加入一个外键指向一的一端,它维护的关系多指向一
一对多映射原理,在多的一端加入一个外键指向一的一端,她维护的关系是一指向多

也就是说一对多与多对一的映射原理是一样的,只是站的角度不一样

在一的一端维护的缺点:
 * 如果将student表里的classesid设为非空,则无法保存;
 * 因为不是在student端维护数据,所以student端不知道学生是哪个班的
 * 所以需要发出多余的update语句来更新关系;
 
 
hibernate 一对多关系映射(双向classes<--->student)

一对多双向关联映:
 * 在一的一端的集合上使用<key>,在对方表中加入一个外键指向一的一端;
 * 在多一端采用<many-to-one>
 
注意:key标签指定的外键字段必须和<many-to-one>指定的外键字段一致,否则引用字段错误;

如果在一的一端维护一对多关联关系,hibernate会发出多余的Update语句,多以我们一般在多的一端维护关联关系


关于inverse属性;
 inverse主要用在一对多,多对对双向关联上,inverse可以设置到<set>集合上,
 默认inverse为false,所以我们可以从一的一端和多的一端来维护关联关系,
 如果inverse为true,我们只能从多的一端来维护关联关系,
 
 注意:inverse属性,只影响存储(使存储方向转变),即持久化,
 
inverse和cascade
 * inverse(反转)是关联关系的控制方向
 * cascade(级联)操作上的连锁反映

 

xxx.hbm.xml文件设置

 <class name="com.gzbb.hibernate.student.Classes">
  <id name="id">
   <generator class="native"/>
  </id>
  <property name="name"/>
  <set name="student"  inverse="true" cascade="all">
   <key column="classesid"/>
   <one-to-many class="com.gzbb.hibernate.student.Student"/>
  </set>
 </class>
 

 <class name="com.gzbb.hibernate.student.Student">
 
  <id name="id">
   <generator class="native"/>
  </id>
  <property name="name"/>
  <many-to-one name="classes" column="classesid"/>
 </class>

 

 

 

 


 

原创粉丝点击