双向的一对多与多对一的关联关系:
1、双向的一对多的关联关系:
在双向的一对多的关联关系中,配置与单向的一对多的关联关系、双向的一对一关联关系也没有什么大的差别。在双向的一对多的关联关系中多的那一端与单向的一对多关联关系设置配置一致;但是在少的那一端呢?
在持久化对象中需要引用多的那一端的对象,在Xxx.hbm.xml中添加<many-to-one></many-to-one>标签;还需在该标签中添加name属性与column属性。name属性的值为引用对象的属性名;column值为外键的字段名
实例:在上面的单向一对多的关联关系中进行修改:
少的一端:不变
多的一端:
Java持久化对象实体:
public class Order {
private int id;
private String orderNum;
private Date orderTime;
private Account account;//引用少的那一端对象
//省去get/set方法
}
Xxx.hbm.xml配置:
<hibernate-mapping>
<class name="com.usc.geowind.lilin.bean.oneToMany.Order" table="Order">
<!-- type指明当前字段的类型 name对应实体中的属性名 -->
<id type="integer" name="id">
<!-- 提供ID自增的策略 native会根据数据库自行判断 -->
<generator class="native"/>
</id>
<property name="orderNum" type="string"></property>
<property name="orderTime" type="timestamp"></property>
<!-- 在双向的一对多的关系中,在多的一端添加该标签
name值为Java文件中少的一端对象的属性名,column为外键名,与另外的一端的xml文件配置中的外键一致 -->
<many-to-one name="account" column="acc_id"></many-to-one>
</class>
</hibernate-mapping>
值得注意的是:在添加数据的时候,添加多的一还是添加一的一端在效率上是有区别的:先添加多的一端,会先添加非外键的字段的值,在添加完一的一端时候,再回去通过Update语句去修改外键的值。而先添加一的那一端,再去添加多的一端时候,外键也会一起添加,从而不需要再去再次通过update语句修改多的那一端对应的数据库表中的外键的值。在需要考虑执行效率的时候,需要慎重选择数据添加方式。
亦可以在一端的Xxx.hbm.xml中的集合标签中添加inverse属性来选择是否实现控制权翻转。当inverse的值设置为true时候,控制权会调换多的一端,这样不会影响查询等操作。但是呢,在数据记录初始化,先插入多的一端,会导致多的一端你的数据库表中的相对应的外键为null,即是一对多的关联关系权维护不在一的那一端,二十在多的那端。这是我们则需要先添加一的那一端的数据记录。
实例:
<!-- inverse属性是是否调换关系维护的控制翻转权,即关系维护权是否交给另外一端 -->
<set name="" inverse="false">
<key column=""></key>
<one-to-many class=""/>
</set>
级联:
在数据的一端发生变化,另外一端跟着变化。在集合标签中设置属性Cascade。例如:
<set name="" inverse="false" cascade="all">
<key column=""></key>
<one-to-many class=""/>
</set>
在inverse="true" cascade="all"两属性一起使用时,级联关系须有,但是能起级联操作的只有在delete中
Cascade属性的取值有:
1、none:忽略其他关联的对象,默认值,无需设定。2、save-update:当session通过save(),update(),saveOrUpdate()方法来保存或更新对象时,级联保存所有关联的新建的临时对象,并且级联更新所有关联的游离对象。
3、persist:当session通过persist()方法来保存当前对象时,会级联保存所有关联的新建的临时对象。
4、merge:通过Session的merge()方法来保存当前对象时,会级联融合所有关联的游离对象。
5、delete:通过delete()删除当前对象时,会级联删除所有关联的对象。
6、lock:通过lock()把当前游离对象加入session缓存时,会把所有的游离对象也加入Session缓存中。
7、replicate:通过replicate()复制当前对象时,会级联复制所有关联的对象。
8、evict:通过evict()清除session缓存中对象时,会级联清除所有关联的对象。
9、refresh:通过refresh()刷新当前对象时,会级联刷新所有关联的对象。(刷新是指同步更新session缓存中数据)
10、all:save-update(),persist(),merge(),delete(),lock(),replicate(),evict()及refresh()的行为。
11、delete-orphan,删除所有和当前对象时,解除关联行为的对象。
12、all-delete-orphan; 通过delete()删除当前对象时,会级联删除所有关联的对象。
相关推荐
**标题:“Hibernate关系映射”** 在Java世界中,Hibernate是一个强大的对象关系映射(ORM)框架,它允许开发者将数据库操作转化为面向对象的方式,极大地简化了数据持久化的复杂性。"多对一"关系映射是Hibernate...
这篇PPT主要介绍了Hibernate的核心概念、持久层的重要性以及ORM(对象关系映射)技术,同时也提及了Hibernate与其他持久层框架的对比。 **Hibernate核心概念** Hibernate是开源的Java库,它提供了一种对象-关系...
在Java企业级开发中,Hibernate是一个非常重要的对象关系映射(ORM)框架,它极大地简化了数据库操作。本文将深入探讨“hibernate关联映射实例”中的关键知识点,包括一对多、多对多和继承映射,这些都是Hibernate中...
SSH(Struts、Spring、Hibernate)是经典的Java Web开发框架,其中Hibernate负责数据访问层,提供了强大的ORM(对象关系映射)功能。本篇文章将深入探讨Hibernate中的一对多和多对多关系映射。 首先,让我们理解一...
这个框架集合了Spring的IoC(Inversion of Control)和AOP(Aspect Oriented Programming)功能,Struts的MVC(Model-View-Controller)设计模式,以及Hibernate的对象关系映射(ORM)解决方案。在构建SSH框架时,...
其中,Hibernate是一个对象关系映射(ORM)框架,它简化了数据库与Java对象之间的交互。在SSH项目中,正确配置Hibernate的jar包是确保数据库操作顺利进行的关键步骤。 该压缩包“SSH中Hibernate所需基本jar包”包含...
本教程将聚焦于如何在IntelliJ IDEA(简称IDEA)环境中集成Hibernate,以便利用其强大的对象关系映射(ORM)功能。"基于IDEA的SSH项目之五:集成Hibernate----lib包"这部分内容主要涉及的是项目的库依赖管理,即`lib...
2. **Hibernate框架**:Hibernate是一个对象关系映射(Object-Relational Mapping, ORM)工具,它简化了数据库操作,将Java对象和数据库表之间的映射关系自动处理。在SSH中,Hibernate作为数据访问层,负责数据库的...
通过学习和理解这些代码,你可以更好地掌握SSH框架下Hibernate的使用方法。 总的来说,SSH中的Hibernate使得开发者能够更加专注于业务逻辑,而不是数据库操作,提高了开发效率和代码质量。在实际项目中,通过SSH的...
然后,我们需要为每个实体类创建对应的Hibernate映射文件(.hbm.xml),这些文件描述了Java对象与数据库表之间的映射关系。例如,如果我们有一个User类,映射文件可能如下所示: ```xml <hibernate-mapping> ...
在这个组合中,Hibernate作为持久层框架,负责对象关系映射(ORM),Spring则在业务逻辑层提供依赖注入(DI)和面向切面编程(AOP),而Struts则是控制层,处理用户请求并转发到相应的业务逻辑。 Hibernate 5是...
3. 配置Hibernate:设置数据库连接信息,映射实体类,配置事务策略。 4. 整合三者:通过Spring管理Struts2的Action,Spring管理Hibernate SessionFactory,让Hibernate与Spring的事务管理协同工作。 SSH框架的使用...
本篇主要关注的是SSH中的Hibernate部分,一个强大的对象关系映射(ORM)框架,它允许开发者用Java对象来操作数据库,而无需直接编写SQL语句。 在“SSH学习记录(5)-简单Hibernate”中,我们可能将深入探讨以下几点:...
3. **Hibernate**:Hibernate是一个对象关系映射(ORM)框架,它简化了Java应用与数据库之间的交互。通过Hibernate,开发者可以将Java对象直接映射到数据库表,无需编写繁琐的SQL语句,从而减少了数据库操作的复杂性...
3. **Hibernate**:Hibernate是一个对象关系映射(ORM)框架,它消除了Java代码与SQL数据库之间的直接交互,将Java对象转换为数据库中的记录,反之亦然。Hibernate通过配置文件(hibernate.cfg.xml)和映射文件(....
### SSH--Hibernate详解 #### ORM概念与重要性 ORM(对象关系映射)是一种编程技术,用于将对象模型表示的数据与关系型数据库管理系统中的数据相互转换。简而言之,ORM提供了一种机制,使得开发者可以通过操作Java...
SSH(Struts、Spring、Hibernate)是Java Web开发中常见的三大框架,而Hibernate作为ORM(对象关系映射)框架,是连接Java应用程序与数据库的关键组件。本总结将围绕Hibernate的核心概念、配置、对象状态、关系映射...
3. Hibernate框架:Hibernate是一个对象关系映射(ORM)工具,它简化了Java应用程序与数据库之间的交互。Hibernate通过XML配置或注解将Java对象与数据库表对应,实现了数据的透明持久化。它支持懒加载、级联操作、...
SSH学习笔记3主要聚焦于三个Java企业级开发框架——STRUTS、SPRING和HIBERNATE的集成与应用。这三个框架是Java后端开发中非常重要的组件,它们各自负责不同的层面,共同构建了一个强大的MVC(Model-View-Controller...
3. 配置Hibernate:在hibernate.cfg.xml中配置数据库连接信息,定义实体类与表的映射(hbm.xml文件)。 4. 配置Struts:在struts-config.xml中定义Action和ActionForm,设置Struts与Spring的整合,如使用Spring的...