`
mqzsweet
  • 浏览: 135201 次
  • 性别: Icon_minigender_1
  • 来自: 江苏
社区版块
存档分类
最新评论

inverse和casade区别

阅读更多
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
分享到:
评论

相关推荐

    inverse和cascade使用阐述

    在IT领域,"inverse"和"cascade"是两个常见的概念,尤其在数据库设计、软件工程以及数据处理中。这两个术语通常与关系型数据库中的外键约束、对象关系映射(ORM)工具,以及某些编程框架的特性相关。下面将详细阐述这...

    hibernate inverse和cascade的详细讲解

    ### Hibernate Inverse 和 ...通过以上内容的介绍,我们不仅理解了`inverse`和`cascade`的基本概念及其应用场景,还了解了它们之间的区别。在实际开发中,合理地利用这两个属性能够极大地提高系统的性能和稳定性。

    Hibernate中Inverse和Cascade的区别.html

    Hibernate中Inverse和Cascade的区别.html

    NHibernate Inverse & Cascade

    "NHibernate Inverse & Cascade"是两个关键概念,对于理解和有效使用NHibernate至关重要。 **Inverse属性** Inverse属性主要用于控制NHibernate如何处理关联对象的持久化。在一对多或多对一的关系中,当一个实体...

    inverse_c语言inverse_inverse在C_cinverse_c语言longinverse_反插值_

    在计算机科学领域,特别是在数值计算和数据处理中,反插值是一种重要的技术。它与插值相反,不是通过已知的离散数据点构建连续函数,而是从一个连续函数估计未知的数据点。在这个主题中,我们关注的是一个使用C语言...

    inverse=true的总结

    这就是所谓的“主控端”(owning side)和“被控端”(inverse side)。 1. **什么是“inverse=true”**: 当我们将一个关联关系的`inverse`属性设置为`true`时,表示该关联的维护责任由关联的另一方负责。这意味...

    inverse 例子

    首先,`inverse`属性主要应用于一对多(OneToMany)和多对一(ManyToOne)的关系映射中。默认情况下,Hibernate假设一方(通常是一对多的那一方)负责维护关联关系,也就是说,当这一方的对象被保存或更新时,它会...

    彻底明白Hibernate中的Inverse

    本文将深入探讨`Inverse`属性,以及它在Hibernate中的作用和应用场景。 一、Hibernate与对象关系映射 Hibernate通过ORM机制将Java对象与数据库表进行对应,使得开发者可以在Java代码中操作对象,而无需直接编写SQL...

    IND Inverse - MetaTrader 4脚本.zip

    总的来说,IND Inverse Indicator 为 MetaTrader 4 用户提供了一个专门针对市场反转点的分析工具,通过理解和应用这个指标,交易者可以增强他们的交易策略,提高交易决策的准确性。同时,MQL4 源代码的开放性也使得...

    MVC映射inverse

    在这个例子中,我们讨论的是`inverse`在一对多双向关联关系中的应用,涉及两个实体类:`Student`和`Class`。 `Student`类代表学生,每个学生对应一个班级;`Class`类代表班级,一个班级可以有多个学生。在数据表...

    hibernate集合映射inverse和cascade详解.txt

    `inverse`和`cascade`属性是Hibernate集合映射中非常重要的概念,它们帮助开发者更灵活地控制实体之间的关系以及操作的级联行为。合理地使用这两个属性,不仅可以简化代码,还能提高程序的性能和健壮性。然而,不当...

    Hibernate中cascade和inverse应用

    cascade 和 inverse 的区别** - `cascade` 关注的是对象之间的操作传播,它定义了如何在操作一个对象时影响其关联对象。 - `inverse` 则关注的是关系的维护,它决定了关联关系的哪一侧负责在数据库中创建或删除...

    JavaEE学习笔记之Hibernate表关系之一对多(inverse详解)

    6. **最佳实践**:在实际开发中,应根据业务逻辑合理设置`inverse`,避免过度依赖`inverse="true"`,因为它可能导致代码难以理解和维护。同时,确保理解`inverse`和`cascade`的组合使用,以防止意外的数据修改。 综...

    Inverse heat conduction ill-posed problems

    Inverse heat conduction ill-posed problems

    Hibernate中cascade与inverse属性详解

    Hibernate中cascade与inverse属性详解

    Inverse Problem Theory and Methods for Model Parameter Estimation

    #### 标题和描述中的核心知识点解析 **标题:** "Inverse Problem Theory and Methods for Model Parameter Estimation"(反演问题理论与模型参数估计方法) 此书名表明了该书的核心内容是关于反演问题的理论及其在...

    PARAMETER ESTIMATION AND INVERSE PROBLEMS(2013)

    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 ...

Global site tag (gtag.js) - Google Analytics