天使 2011-07-13
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;