delete和all-delete-orphan在进行删除操作时的不同

 -----------------------------------------------------------------------------------------

delete:当通过Session的delete()方法删除当前对象时,级联删除所有关联的对象。

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

all-delete-orphan:包含了delete和delete-orphan的行为。

-----------------------------------------------------------------------------------------

 

如下代码:

 //删除酒店对象 private void delete(){ TbHotelDAO hotelDAO =new TbHotelDAO(); TbHotel hotel = (TbHotel) hotelDAO.findByHotelName("中共是混蛋").get(0); Iterator it = hotel.getTbBuildings().iterator(); TbBuilding building1 = (TbBuilding) it.next(); building1.setTbHotel(null); it.remove(); hotelDAO.delete(hotel); }

 

 当:cascade="delete",执行上面delete方法,building1对象的与hotel解除了关联,所以它不会被删除。该酒店的参照物以及酒店本身都会被删除。

 

当:cascade="all-delete-orphan",执行上面delete方法,building1对象与hotel解除了关联,它与该酒店的参照物以及酒店本身都会被删除。

 

 

注意上面的代码中有一句:building1.setTbHotel(null);

当cascade="all-delete-orphan",去掉这一行代码也没有关系,因为接下来的一行代码it.remove();还是会让building1对象丧失与酒店的关联,于是它仍旧会被删除,同时酒店和其关联参照物也会被删除。

但是,当cascade="delete",去掉这一行会出现错误,因为building1对象只是丧失了与酒店的关联,而

不会被删除掉,并且它的hotel_id没有被设置为null,所以,在删除数据库中酒店数据的时候,就会违反外键约束的原则,从而出现错误。

 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/chaohi/archive/2009/06/17/2330420.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值