Hibernate一对多关联

一对多双向关联关系:(Dept/Emp的案例)

      既可以根据在查找部门时根据部门去找该部门下的所有员工,又能在检索员工时获取某个员工所属的部门。


步骤如下:

  1.构建实体类(部门实体类加set员工集合)

  2.准备持久化类的映射文件(部门配置中,植入一对多配置)

  3.构建大配置,关联小配置

  4.构建测试类


1.构建实体类(部门类)

  使用Set集合可以使保存的内容不重复。

Hibernate一对多关联

员工类:

Hibernate一对多关联


2.准备持久化类的映射文件

 Dept小配置:

Hibernate一对多关联

<set>元素的name属性:设定持久化类的属性名。此处为Dept类的emps属性。

<set>元素还包含两个子元素:

《1》.<key>元素:column属性设定与所关联的持久化类对应的表的外键。

《2》.<one-to-many>元素:class属性设定与所关联的持久化类。

 Emp小配置:

Hibernate一对多关联


3.构建大配置,关联小配置(关键代码)

Hibernate一对多关联


4.构建测试类:

Hibernate一对多关联


cascade属性

none:当Session操纵当前对象时,忽略其他关联的对象。它是cascade属性的默认值.

      Save-update:当通过Session的save()、update()及saveOrUpdate()方法来保存或更新当前对象时,级联保存所有关联的新建的瞬时状态的对象,并且级联更新所有关联的游离状态的对象。

      Delete:当通过Session的delete()方法删除当前对象时,会级联删除所有关联的对象。

     当通过Session的delete()方法删除当前对象时,会级联删除所有关联的对象。

      All:包含save-update,delete的行为。

解析:

  级联也就是说当我们保存持久化对象A的时候自动帮我们保存持久化对象B。

  问题:cascade属性写在什么位置?

  注:一对一或者多对一的时候,直接写在标签上,其他的写在set标签上。

  如何实现添加部门的同时自动添加员工?

  解析:可以使用cascade(级联)方式

Test:双向关联  通过add()将新建的员工对象添加部门下

Hibernate一对多关联


<Set>元素下的inverse属性(反转)

  inverse属性指定了关联关系中的方向。

  inverse设置为false,则为主动方,由主动方负责维护关联关系,默认是false 。

  注意:inverse 决定是否把对对象中集合的改动反映到数据库中,所以inverse只对集合起作用,也就是只对one-to-many或many-to-many有效(因为只有这两种关联关系包含集合,而one-to-one和many-to-one只含有关系对方的一个引用)。

  说明:如果我既给员工指定了自己所属的部门,又将员工添加到部门集合中。那么这个时候reverse不设置,生成以下sql

  inverse设置为true,不负责维护关联关系。

上一篇:转Hibernate 一对多关联的CRUD__@ManyToOne(cascade=(CascadeType.ALL))


下一篇:改变VC生成exe图标