hibernate 配置cascade 及all-delete-orphan

cascade几种取值:

save-update:级联保存(load以后如果子对象发生了更新,也会级联更新).但它不会级联删除

delete:级联删除,但不具备级联保存和更新

all-delete-orphan:在解除父子关系时,自动删除不属于父对象的子对象,也支持级联删除和级联保存更新.

all:级联删除,级联更新,但解除父子关系时不会自动删除子对象.

delete-orphan:删除所有和当前对象解除关联关系的对象

none:...

级联保存和级联更新总是集合在一起的,所以没单独的save或update

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

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

all-deleteorphan的能力:

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

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

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

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

customer.getOrders().remove(order);

order.setCustomer(null);

tx.commit();

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

updateORDERsetCUSTOMER_ID=nullwhereID=2

如果要把它也删掉,则设置:

<setname="orders"cascade="all-delete-orphan"inverse="true">

<keycolumn="CUSTOMER_ID"/>

<one-to-manyclass="mypack.Order"/>

再运行时就会执行:deletefromORDERSwhereCUSTOMER_ID=2andID=2;

相关推荐