`
only_java
  • 浏览: 110364 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

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的行为。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics