首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

Hibernate级联设立

2012-08-21 
Hibernate级联设置在hibernate中一对多关联时会经常用到inverse和cascade属性 ?inverse 有两个值 true、fal

Hibernate级联设置

在hibernate中一对多关联时会经常用到inversecascade属性

?

inverse 有两个值 true、false;如果设置为true 则表示当前对象不负责将级联对象的状态变化同步到
数据库;设置false则相反。其默认值为false。

?

cascade 有五个选项 分别是: all ,delete ,none,save-update,delete-orphan ;
all : 所有情况下均进行关联操作。
none:所有情况下均不进行关联操作。这是默认值。
save-update:在执行save/update/saveOrUpdate时进行关联操作。
delete:在执行delete时进行关联操作。
delete-orphan: 当save/update/saveOrUpdate时,相当于save-update ;当删除操作时,相当于delete ;

all的意思是save-update + delete
all-delete-orphan 的意思是当对象图中产生孤儿节点时,在数据库中删除该节点
all比较好理解,举个例子说一下all-delete-orphan:
Category与Item是一对多的关系,也就是说Category类中有个Set类型的变量items.
举个例子,现items中存两个Item, item1,item2,如果定义关系为all-delete-orphan
当items中删除掉一个item(比如用remove()方法删除item1),那么被删除的Item类实例
将变成孤儿节点,当执行category.update(),或session.flush()时
hibernate同步缓存和数据库,会把数据库中item1对应的记录删掉


inverse 设定的原则
1. 在映射一对多双向关联关系时,应该设定 many 方的 inverse 为 true,以提高性能
2. 在建立两个对象的双向关联时,应同时修改关联两端的对象的相应属性:

?

多对多关联关系删除、保存的配置如下:

?

cascade的设定原则:

1.多对多关联关系设置的cascade="save-update",

2.一对多、一对一关联关系设置的cascade值则依照需求设置

?

?

附 hibernate cascade备忘:

当关联双方存在父子关系,就可以在set处设定cascade为all-delete-orphan

?

所谓父子关系,即指由父方控制子方的持久化生命周期,子方对象必须和一个父方对象关系。如果删除父方对象,应该级联删除所有关联的子方对象;如果一个子方对象不再和一个父方对象关联,应该把这个子方对象删除。

?

all-delete-orphan的能力:

1.当保存或更新父方对象时,级联保存或更新所有关联的子方对象,相当于cascade为save-update

2.当删除父方对象时,级联删除所有关联的子方对象,相当于cascade为delete

3.删除不再和父方对象关联的所有子方对象

?

解除父子关系的java语句例如:

customer.getOrders().remove(order);

order.setCustomer(null);

tx.commit();

?

如果cascade属性取默认值null,当解除父子关系时,会执行如下sql:

update ORDER set CUSTOMER_ID = null where ID = 2

热点排行