hibernate多对一、一对多配置

理解多对一,一对多决窍:

谁维护关系,谁就是一个公司负责人, 当发生问题时,我们肯定是先找负责人。然后由负责人再找到下面的小喽喽。

1、多对一:

      多对一比较简单。

      以user对group为例,user是多,group是一。

      那么在User类里面加个属性Group。

      在User.hbm.xml里面,像如下配置:

<many-to-one name="group" column="groupid"/>

 

2、一对多:

      如果仅设成单向的话,那么会出现N+1问题。

      以Class对应Student为例,单向的话,Class维护关系,依赖Student。

      既然依赖Student,那么必然先要有Student,当学生新建时,外键classid上面必然是空的(看表就知道了,数据 库表t_class就2个字段,id和name,必然会在t_student上面加个外键classid),等有了Class后,因为Class维护关系,所以Class会再去update,将classid更新上,如果有1000个学生,则会更新1000遍,有性能问题。

     所以必然添加一个反向(即让多的一方来维护关系),让student维护关系,并且让之前class的关系失效,即Inverse="true",而这个过程就是双向的过程,更是双向存在的意义所在。

     在Class.hbm.xml里面:

<set name="students" inverse="true">
<key column="classid" >
<one2many class="com.my.Student">
</one2many>
</set>

注意:设置时首先配置一个<set>标签出来,然后配name,就是在一的一边集合的名字,然后就是设置一个外键,这个外键和多对一里面设的是一样的,然后再设置一下集合里面放的是什么,用one2many标签实现就完成了。

    在Student.hbm.xml里面:

<many2one name="class" column="classid"/><!--class是指Student中的属性名,classid是指外键 -->
</many2one>

   

猜你喜欢

转载自wandejun1012.iteye.com/blog/1821437