Hibernate级联和关系维护:
以上面的代码为例说明:
有两个类,Employee员工类,Department部门类
很明显员工是属于部门类,因此Employee中含有Department的属性,来表示员工的部门信息
以部门为参照,两表的关系是一对多,当执行上面的方法(用来保存员工)时候,要创建一个部门对象
依照上面的方法,员工以Set集合的方法赋给部门的属性了,一般认为应该是只用保存部门就可以把两
个员工信息保存进数据库了,但是程序运行结果却没有保存Department类中的Set<Employee>类型
的employee属性,为什么?
它能把员工的id,name属性保存下来,但是没有把employee(Set<Employee>类型)属性保存
解释:Hibernate在保存数据的时候默认情况下不会把有关联的属性保存起来,而employee属性就是
Department和Employee类关联的属性,因此在默认情况下,没有保存
这是一种缺省的行为,这种行为是可以修改的,可以在映射文件中配置级联就可以了
下面是Department部门类的映射文件,可以这样配置一下employee属性:
标签说明:
Cascade:
用来说明当主对象进行某种操作时是否对其级联的从对象也进行类似的操作,
常用的cascade值有:
none 缺省值,就是不会进行类似的操作
all 所有的,就是对所有的操作都要进行级联操作
save-update 保存和更新级联
delete-orphan(one-to-many) 删除级联 拿部门和员工说明,如果把某一个部门的信息删除或修改为空,
那么他相对应的从属的所有员工信息也会被删除
delete
lock
refresh
evict
replicate
persist
merge
级联要根据业务需求,一般many-to-many,many-to-one关系中不配置级联,在one-to-one,
one-to-many设置级联,慎用!