hibernate学习之cascade篇

级联保存和更新
当hibernate持久化一个临时对象时,在默认的情况下,不会自动持久化其关联的其他临时对象.如果希望同时持久化其相关的的其他临时对象,则可以把<many-to-one>的cascade属性值改为"sava-update",其默认值"none".
例如:当使用:

<many-to-one
name="customer"
cloumn="CUSTOMER_ID"
class="mypack.Customer"
/>



tx=session.beginTransaction();
Customer customer=new customer("jack");
//session.save(customer);//不保存customer对象,customer为临时对象
Order order1=new Order('jack01',customer);
Order order2=new Order('jack02',customer);
session.save(order1);//将抛出异常
session.save(order2);

当hibernate清理(flush,按持久化对象的状态来更新数据库)缓存中所有持久化对象时,抛出TransientObjectException异常.内存中的持久化状态和数据库记录不一致导致了这一异常,内存中order1对象引用了customer,而在数据库中CUSTOMER_ID字段值为null.
当使用

<many-to-one
name="customer"
cloumn="CUSTOMER_ID"
class="mypack.Customer"
cascade="save-update"
/>



tx=session.beginTransaction();
Customer customer=new customer("jack");
//session.save(customer);//不保存customer对象
Order order1=new Order('jack01',customer);
Order order2=new Order('jack02',customer);
session.save(order1);//将通过cascade属性值”save-update“进行级联更新
session.save(order2);


总结(引用某博友的内容):
Save-update 保存、更新Customer会同步更新Order.
Delete 同步删除
All 包含save-update和delete操作,另外调用当前对象的evice或者lock时,对关联对象也调用相应方法。
Delete-orphan 删除所有和当前对象解除关联关系的对象。
All-delete-orphan 当关联双方为父子关系是(父亲控制孩子的持久化生命周期),如果父方删除,子方自动删除(同delete),如果子方无父亲,子方应删除。包含Delete和all-orphan的行为。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值