hibernate中collection该何时使用cascade

先说说cascade的取值:如果用save-update,只是对存储过程和更新过程级联,在删除数据的时候,引用表的外键为空,不做级联删除,而用delete的话时,在对父表操作时,同时级联所有的更新操作和删除操作,也就是说在删除父表时同时删除子表中引用父表pk做外键的项,但是和内存中不同步.all-delete-orphan可以和内存中数据做同步. 再说说应用场合:

BookType bookType = new BookType();

Book book1 = new Book();

 book1.setType(bookType);

 Book book2 = new Book();

book2.setType(bookType);

bookService.save(book1);

 bookService.save(book2);

先创建一个 “书本类” 的实例,再创建 2本书,都是属于这本书,保存这2本书,结果出错。为什么?因为没有把BookTpye保存,所以那2本书的类别字段就不能保存了。这时使用cascade就可以保存book的时候自动保存booktype。 当然,还有另一种应用场合,就是booktype是预定义的,不是用户新创建的。这个时候无论book的增加还是删除,都不应当影响booktype,因此不能增加cascade属性。在appfuse当中,user的定义:

        <set
            name="roles"
            table="user_role"
            lazy="false"
            cascade="save-update"
        >
由于role都是预定义的,所以这里使用cascade并不妥当,某些应用场合可能会造成异常。(在role重新保存的时候,可能会报id相同无法保存)

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值