Inverse 和 cascade 是 Hibernate 映射中最难掌握的两个属性。两者都在对象的关联操作中
发挥作用。
1.明确 inverse 和 cascade 的作用
inverse 决定是否把对对象中集合的改动反映到数据库中,所以 inverse 只对集合起作用,
也就是只对 one-to-many 或 many-to-many 有效(因 为只有这两种关联关系包含集合,而
one-to-one 和 many-to-one 只含有关系对方的一个引用)。
cascade 决定是否把对对象的改动反映到数据库中,所以 cascade 对所有的关联关系都起
作用(因为关联关系就是指对象之间的关联关系)。
2.inverse 属性 :inverse 所描述的是对象之间关联关系的维护方式。
inverse 只 存在于集合标 记的元素中 。Hibernate 提供的集合元 素包括 <set/> <map/>
<list/> <array /> <bag />
Inverse 属性的作用是:是否将对集合对象的修改反映到数据库中。
inverse 属 性 的 默 认 值 为 false , 表 示 对 集 合 对 象 的 修 改 会 被 反 映 到 数 据 库 中 ;
inverse=false 的为主动方,由主动方负责维护关联关系。
inverse=”true” 表示对集合对象的修改不会被反映到数据库中。
为了维持两个实体类(表)的关系,而添加的一些属性,该属性可能在两个实体类(表)
或者在一个独立的表里面,这个要看这双方直接的对应关系了: 这里的维护指的是当主控
放进行增删改查操作时,会同时对关联关系进行对应的更新。
一 对多 : 该 属 性在 多的 一 方。 应 该在 一 方的 设 置 inverse=true , 多的 一 方设 置
inverse=false(多的一方也可以不设置 inverse 属性,因为默认值是 false),这说明关联
关系由多的一方来维护。如果要一方维护关 系,就会使在插入或是删除" 一"方时去
update"多"方的每一个与这个"一"的对象有关系的对象。而如果让"多"方面维护关系时就不
会有 update 操作,因为关系就是在多方的对象中的,直指插入或是删除多方对象就行了。
显然这样做的话,会减少很多操作,提高了效率。
注:
单向 one-to-many 关联关系中,不可以设置 inverse="true",因为被控方的映射文件中没
有主控方的信息。
多对多: 属性在独立表中。inverse 属性的默认值为 false。在多对多关联关系中,关系
的两端 inverse 不能都设为 false,即默认的情况是不对的,如果都设为 false,在做插入操作
时会导致在关系表中插入两次关系。也不能都设为 true,如果都设为 true,任何操作都不会
触发对关系表的操作。因此在任意一方设置 inverse=true,另一方 inverse=false。
一对一: 其实是一对多的一个特例,inverse 的设置也是一样的,主要还是看关联关系的
属性在哪一方,这一方的 inverse=false。
多对一: 也就是一对多的反过来,没什么区别。
2.cascade 属性
评论0
最新资源