Hibernate中级联操作cascade选项
来源:互联网 发布:win7怎么更改网络位置 编辑:程序博客网 时间:2024/05/16 10:06
cascade可选的值包括:
all对所有的操作进行级联;
none,对所有的操作都不进行级联;
save-update,执行更新操作时级联;
delete,执行删除操作时级联。
all-delete-orphan,包含all和delete-orphan的行为
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();
这样子就能够级联删除分类和此分类下的图书数据了。- Hibernate中级联操作cascade选项
- Hibernate中级联操作cascade选项
- Hibernate中级联操作cascade选项
- Hibernate中级联操作cascade选项
- 【Hibernate】级联操作 cascade 选项
- Hibernate级联操作Cascade
- Hibernate 级联操作 cascade
- Hibernate cascade 级联操作
- Hibernate级联操作cascade
- hibernate的级联操作cascade
- hibernate 的级联操作 cascade操作
- Hibernate级联操作Cascade学之---delete
- Hibernate的Cascade——级联操作
- Hibernate 级联操作cascade及inverse
- hibernate中关系操作(inverse)和级联操作(cascade)详解
- hibernate的级联----cascade
- Hibernate (cascade)级联关系
- Hibernate级联--cascade,inverse
- 分割字符串
- asp:Content的用法
- String常用方法
- 工业控制与电脑编程
- Hibernate几种映射类型
- Hibernate中级联操作cascade选项
- Website Addresses Collections
- lazy与inverse
- 失望
- JAVA平台与JAVA虚拟机
- STL 总结收藏
- eclipse 插件安装
- hibernate抓取策略fetch=select /join/subselect
- clearcase和perl