【Hibernate】级联操作 cascade 选项

转自:http://blog.csdn.net/lenotang/archive/2008/08/04/2767960.aspx

Hibernate 中级联操作 cascade 选项

none :在保存、更新或删除对象时,忽略其他关联的对象。他是 cascade 属性的默认值。

save-update :当通过 Session 的 save() 、 update() 以及 saveOrUpdate() 方法保存或更新当前对象时,级联保存所有关联的新建的临时对象,并且级联更新所有关联的游历对象。

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

all :包含 save-update 以及 delete 的行为。此外,对当前对象执行 evict() 或 lock() 操作时,也会对所有关联的持久话对象执行 evict() 或 lock() 操作。

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

all-delete-orphan :包含 all 和 delete-ophan 。

注意,很多人在使用 Session 对象的 delete() 方法时,设置了 <set cascade=”delete”> ,如下示例删除图书的一个分类:

Category c = new Category();

c.setId(11);

session.delete(c);

结果没有任何动静,那是因为删除操作没有放在一个事务里面。

Transaction tran = session.beginTransaction();

Category c = new Category();

c.setId(11);

session.delete(c);

tran.commit();

加了事务后,能够删除分类表的数据了。但是对应此分类的图书的数据却只是将关联的分类 ID 修改为了 null, 并没有真正删除。这是为什么呢?主要就是因为我们这里的 Category 对象只是一个临时对象。它在删除之前会被持久化,但它所关联的图书对象却不会被自动持久化。那如何是好?我们修改一下实现代码:

Transaction tran = session.beginTransaction();

Category c = (Category) session.get(Category.class, 11);

session.delete(c);

tran.commit();

这样子就能够级联删除分类和此分类下的图书数据了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值