网上很多资料都认为cascade和inverse是有关系的,但是我个人理解两个之间应该是没有关系的,cascade仅仅是一个级联设置,它代表在操作该实体的时候是否级联操作相关联的实体,而非只有关系维护端才能级联,假设有两张表parent和child,parent和child是一对多的关系,一个parent可以有多个child,而多个child可以属于一个parent,假设XML配置如下:
<class name="Parent" table="parent">
<id name="ID" unsaved-value="0">
<generator class="increment" />
</id>
<set name="children" table="child" lazy="true" cascade="all" inverse="true">
<key column="parentID"></key>
<one-to-many class="Child"/>
</set>
</class>
<class name="Child" table="child">
<id name="ID" unsaved-value="0">
<generator class="increment" />
</id>
<many-to-one name="parent" class="one2many.Parent" cascade="all">
<column name="parentID"/>
</many-to-one>
</class>
清单1.1:
Parent parent = new Parent();
Child child = new Child();
parent.getChildren().add(child);
child.setParent(parent);
Transaction tx = session.beginTransaction();
session.save(parent);//注释一
//session.save(child);//注释二
session.flush();
如果在parent端cascade=none,则只能创建parent对象,但是因为cascade="all",这样在创建parent的时候,会去创建和自己相关联的child对象,同理,因为在child端也是cascade="all",因此注释一处执行和注释二处执行是一样的,只不过是插入数据库的顺序不同而已,在创建child的时候也会级联去创建parent,其实这就是cascade的所有作用,其中要注意的是,因为在级联操作时,主对象需要知道对关联的对象究竟应该使用save还是update,因此,一定要在主键中声明unsaved-value=...,在该例中,如果没有这个选项的话,hibernate默认的是null,但是我们实际使用的是基本类型,这样会导致在保存parent时,hibernate中判断时会认定child是一个已经保存对象(因为child.getID != null),所以仅仅会执行update操作,这样肯定会出错,所以在使用cascade的时候一定要注意设定好unsaved-value选项。
分享到:
相关推荐
Hibernate 是一个流行的对象...总的来说,这个中文帮助文档详尽地阐述了使用Hibernate注解进行数据库映射的各种细节,对于理解和使用Hibernate进行Java开发非常有帮助。无论是新手还是经验丰富的开发者,都能从中受益。
本文将深入探讨Hibernate中的关联映射,帮助初学者理解如何在实体之间建立联系,以及如何正确配置这些关联。 #### 关联映射的基本概念 在关系型数据库中,数据通常被组织成多张表,并通过外键来表示实体之间的关系...
总之,Hibernate关联关系是理解其工作原理的关键,它使得Java对象和数据库记录之间的映射变得简单。通过练习,你可以掌握如何配置和使用这些关系,以及如何进行相关的查询操作,从而提升你的开发效率和代码质量。...
文档最后列出了一系列关键术语,帮助理解文档中的专业词汇。 总的来说,《Hibernate Annotations中文帮助文档》是学习和掌握Hibernate ORM框架的宝贵资源,它详细阐述了如何利用注解进行对象关系映射,以及进行...
在Java的持久化框架中,Hibernate是一个非常流行的ORM(对象关系映射)工具,它允许开发者用面向对象的方式来处理数据库操作。本实例主要探讨了Hibernate中的三种基本映射关系:一对一、一对多以及多对多,并且是...
学习并理解Hibernate中的一对一关联对于提升Java开发效率至关重要。通过这个测试案例,新手可以深入理解如何配置和使用`@OneToOne`注解,以及如何进行关联操作。实践中,要注意合理设置级联操作,避免数据冗余,确保...
- **2.2.5.4 用 cascading 实现传播性持久化**:通过 `@Cascade` 注解设置关联关系中的级联操作,例如级联保存或删除。 - **2.2.5.5 关联关系获取**:可以通过 `@Fetch` 注解来优化关联关系的加载策略,提高查询...
本文将详细解析标题所提及的“hibernate的一个简单关联应用”,并深入探讨如何设置和理解实体类、数据库表、以及映射文件。 首先,我们看到两个实体类`Company`和`Address`,它们代表了公司和地址的概念。在`...
Hibernate是一个强大的Java持久层框架,它为开发者提供了对象关系映射(ORM)功能,使得在Java应用中操作数据库变得更加简单。 在该项目中,你将学习到以下关键知识点: 1. Hibernate核心接口: - Session:这是...
对于初学者来说,理解并应用Hibernate可能有些复杂,但通过简单的实例,我们可以快速入门。这个实例将涵盖Hibernate的基础知识,包括注解方式和XML配置方式。 1. **安装与配置** 在开始之前,你需要在项目中添加...
然而,理解和掌握对象关系映射的原理,以及合理使用Hibernate的特性和最佳实践,对于提高开发效率和系统性能至关重要。通过深入学习和实践,开发者可以充分利用Hibernate的优势,构建高效、可维护的Java应用。
Hibernate 允许开发者用面向对象的方式来操作数据库,它通过映射Java类到数据库表,使得数据库操作变得简单且直观。在Hibernate中,一个Java实体类对应数据库中的一张表,实体类的属性则对应表的列。这种映射关系...
在Java的持久化框架中,Hibernate是一个非常重要的工具,它为开发者提供了强大的对象关系映射(ORM)功能,使得数据库操作变得更为简单。本篇主要围绕"hibernate的表关联操作"展开,通过映射关系来实现对实体类的增...
8. **级联操作**:在映射文件中,可以通过设置`cascade`属性实现对象间的级联操作,如级联保存、级联删除,简化了数据操作的复杂度。 9. **懒加载与立即加载**:Hibernate支持懒加载和立即加载策略。懒加载只在真正...
通过学习本教程,读者将能够熟练掌握Hibernate的基本用法,理解其工作原理,并能够在实际项目中灵活运用,大大提高开发效率和代码质量。无论是初学者还是有经验的开发者,都可以从中受益,让数据库操作变得简单而...
本篇将详细讲解如何在Hibernate中使用外键`ForeignKey`,以及通过一个简单的例子帮助学习者深入理解其配置与操作。 首先,外键是数据库设计中的一个重要概念,它用于建立两个表之间的关联,通常用来维护数据的一致...
在IT领域,尤其是在Java开发中,Hibernate是一个非常重要的对象关系映射(ORM)框架,它允许开发者用面向对象的方式操作数据库。...在实践中,理解并熟练运用这些技术对于提升开发效率和代码质量至关重要。
此外,还讨论了unsaved-value、Inverse和Cascade等概念,以及延迟加载机制,这些都是理解Hibernate数据访问模式的关键。 #### 事务管理与锁机制 事务管理是任何数据库操作中不可或缺的一部分,文档不仅阐述了基于...
理解并熟练掌握这些知识将极大地帮助开发人员利用Hibernate进行高效的数据持久化操作。在未来的工作实践中,开发人员还可以根据项目的具体需求灵活运用这些技巧,进一步提升系统的性能和可维护性。