cascade的delete-orphan配置

在一对多的设置上delete-orphan多见,但在many-to-one上,其依然好用。例如我们常用many-to-one来代替one-to-one,这样有时就要求根据把父对象的(many-to-one)属性设置为null是,直接把其属性对应的表子记录也要删除。

例如:用户信息对象、用户附属信息对象。两个对象是一对一的(附属对象上用户对象上的一个属性),在hibernate配置上用many-to-one来代替,这样如果设置“附属信息”属性的cascade='delete-orphan'。
java代码:
this.用户信息dao.lock(用户信息对象).
用户信息对象.set附属信息(null);

则会生成两个sql.

1.update 用户信息对象 set 附属信息=null where id=用户信息id.
2.delete from 附属信息 where 附属信息.id=原关联在用户信息对象的附属信息id.


一对多配置,但执行删除的时候,还是一条一条删。


jczjyyhxx.getJcsbs().clear();
for (Jcsb jcsb : jczjyxxForm.getJcsbs()) {
jcsb.setJcsbxh(null);// 注意hashcode
jczjyyhxx.addJcsb(jcsb);
}


<set name="jcsbs" inverse="true" cascade="all-delete-orphan">
<key column="fk_jczjyxxxh" />
<one-to-many class="Jcsb" />
</set>

你可能感兴趣的:(cascade)