Inverse 和 cascade的区别
实际上,他们是互不相关的概念:
inverse是指的关联关系的控制方向,而cascade指的是层级之间的连锁操作。
级联删除
在默认情况下,当Hibernate删除一个持久化对象时,不会自动删除与他关联的其他持久化对象,如果希望Hibernate删除Customer对象时,自动删除和Customer关联的Order对象,可以把cascade的属性设置为delete。
注意:在关联的双方的哪一方设置cascade为delete呢?是不是要在双方都要设置呢?这个主要看项目本身。
如果项目是针对一对多的,应该在“one”方设置cascade为delete,不能在“many”方设置cascade为delete 。
提示:所谓删除一个持久化对象,并不是指从内存中删除这个对象,而是从数据库中删除相关的记录。这个对象依然存在于内存中,只不过由持久化状态转变成为临时状态。
cascade属性可以有多个值,中间用逗号分开,eg:cascade="save-update,delete
<set name="orders" cascade="all-delete-orphan" inverse="true">
<key column="c_id"></key>
<one-to-many class="net.mbs.mypack.Order" />
</set>
Cascade属性的all-delete-orphan值
当我们解除Customer和Order对象之间的关系时:
customer.getOrdersa().remove(order);
order.setCustomer(null);
系统会执行 update order set c_id=null where id=? //前提: c_id列允许为null
如果希望Hibernate自动删除不再和Customer对象关联的Order对象,可以把cascade属性设置为all-delete-orphan
all-delete-orphan值的总结
1:当保存Customer对象时,级联保存所有关联的Order对象,相当于cascade=“save-update”
2:当删除Customer对象时,级联删除所有关联的Order对象,相当于cascade=“delete” .
3;删除不再和Customer对象关联的所有Order对象
当关联双方存在父子关系时,就可以把父方的cascade属性设置为“all-delete-orphan”
] 所谓父子关系,是指由父方子方的持久化生命周期,子方对象必须和一个父方对象关联
如果删除父方对象,应该级联删除所有的关联的子方对象。
如果子方对象不再和一个父方对象关联,应该把这个子方对象删除。
类与类之间是否存在父子关系是由业务逻辑需求来决定 的,通常认为Customer和Order之间存在父子关系,而Company和Worker 之间不存在父子关系。
食品类别---->蔬菜---水果
蔬菜------->西红柿类别
水果------->苹果----柿子
上面的每种类别代表一个Category对象,这些对象形成了树型数据结构,每个Category对象可以和一个父类别Category对象关联,同时还可以和一组子类别Category对象关联
为了实现上面的图例,我们制作一Category类,为了表达双向关联关系,我们在Category类中定义两个属性:
1:parentCategory:引用父类别的Category对象(比如苹果类别对象的parentCategory就是水果)
2。childCategories :引用一组子类别Category对象
现在相成的关系是
一个Category对象可以一个父Category对象关联(如水果类别对象有一个父类,而食品类别的父类是自身)
一个Category对象可以和零个(如苹果类别对象没有子类)或一组子类Category对象关联(如水果类别对象有一组子类)
数据库表方面,我们只提供了一个叫category的表,有三列
ID :标识列,表示每一类别
Name:类别的名字 ;
category_id 当前类别的父类别的id号,如果是顶级类别,如食品类别,category_id列的值自的OID。
注意 category_id列必须允许为null,否则在插入时,将丢出nullPointException异常
注意事项
1:在category.hbm.xml中应该配置set的cascade属性值为 all-delete-orphan,这样在删除一个父类别后,只要让他的所有子类别的对应的父类别为null ,就可以方便的删除所有子类别。
2:在OID中,在更新了两个类别之间的关系,并进行事务的提交后,必须调用session.clear()将session缓存进行清空,否则在以后用load()或get()加载的对象还是没有更新前的状态(如果session缓存中已经在要加载OID相同的对象)
3。在删除一个类别时,必须先删除此类别和父类别以及所有子类别的关联。
Category category=(Category)session.load(Category.class,cate.getId());
category.getParentCategory().getChildCategories().remove(category);
Object [] cs=category.getChildCategories().toArray();
System.out.println("数组长度"+cs.length);
for(int i=0;i < cs.length;i++)
{//删除和所有子类别的关联关系
Category child=(Category)cs;
chlid.setParentCategory(null);
category.getChildCategories().remove(cs);
}
session.delete(category);
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1794807
分享到:
相关推荐
在IT领域,"inverse"和"cascade"是两个常见的概念,尤其在数据库设计、软件工程以及数据处理中。这两个术语通常与关系型数据库中的外键约束、对象关系映射(ORM)工具,以及某些编程框架的特性相关。下面将详细阐述这...
### Hibernate Inverse 和 ...通过以上内容的介绍,我们不仅理解了`inverse`和`cascade`的基本概念及其应用场景,还了解了它们之间的区别。在实际开发中,合理地利用这两个属性能够极大地提高系统的性能和稳定性。
Hibernate中Inverse和Cascade的区别.html
"NHibernate Inverse & Cascade"是两个关键概念,对于理解和有效使用NHibernate至关重要。 **Inverse属性** Inverse属性主要用于控制NHibernate如何处理关联对象的持久化。在一对多或多对一的关系中,当一个实体...
在计算机科学领域,特别是在数值计算和数据处理中,反插值是一种重要的技术。它与插值相反,不是通过已知的离散数据点构建连续函数,而是从一个连续函数估计未知的数据点。在这个主题中,我们关注的是一个使用C语言...
这就是所谓的“主控端”(owning side)和“被控端”(inverse side)。 1. **什么是“inverse=true”**: 当我们将一个关联关系的`inverse`属性设置为`true`时,表示该关联的维护责任由关联的另一方负责。这意味...
首先,`inverse`属性主要应用于一对多(OneToMany)和多对一(ManyToOne)的关系映射中。默认情况下,Hibernate假设一方(通常是一对多的那一方)负责维护关联关系,也就是说,当这一方的对象被保存或更新时,它会...
本文将深入探讨`Inverse`属性,以及它在Hibernate中的作用和应用场景。 一、Hibernate与对象关系映射 Hibernate通过ORM机制将Java对象与数据库表进行对应,使得开发者可以在Java代码中操作对象,而无需直接编写SQL...
总的来说,IND Inverse Indicator 为 MetaTrader 4 用户提供了一个专门针对市场反转点的分析工具,通过理解和应用这个指标,交易者可以增强他们的交易策略,提高交易决策的准确性。同时,MQL4 源代码的开放性也使得...
在这个例子中,我们讨论的是`inverse`在一对多双向关联关系中的应用,涉及两个实体类:`Student`和`Class`。 `Student`类代表学生,每个学生对应一个班级;`Class`类代表班级,一个班级可以有多个学生。在数据表...
`inverse`和`cascade`属性是Hibernate集合映射中非常重要的概念,它们帮助开发者更灵活地控制实体之间的关系以及操作的级联行为。合理地使用这两个属性,不仅可以简化代码,还能提高程序的性能和健壮性。然而,不当...
cascade 和 inverse 的区别** - `cascade` 关注的是对象之间的操作传播,它定义了如何在操作一个对象时影响其关联对象。 - `inverse` 则关注的是关系的维护,它决定了关联关系的哪一侧负责在数据库中创建或删除...
6. **最佳实践**:在实际开发中,应根据业务逻辑合理设置`inverse`,避免过度依赖`inverse="true"`,因为它可能导致代码难以理解和维护。同时,确保理解`inverse`和`cascade`的组合使用,以防止意外的数据修改。 综...
Inverse heat conduction ill-posed problems
Hibernate中cascade与inverse属性详解
#### 标题和描述中的核心知识点解析 **标题:** "Inverse Problem Theory and Methods for Model Parameter Estimation"(反演问题理论与模型参数估计方法) 此书名表明了该书的核心内容是关于反演问题的理论及其在...
This textbook evolved from a course in geophysical inverse methods taught during the past two decades at New Mexico Tech, first by Rick Aster and, subsequently, jointly between Rick Aster and Brian ...