首先我们了解一个名词ORM,全称是(Object Relational Mapping),即对象关系映射。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现,这样开发人员就可以把对数据库的操作转化为对这些对象的操作。Hibernate正是实现了这种思想,达到了方便开发人员以面向对象的思想来实现对数据库的操作。
Hibernate在实现ORM功能的时候主要用到的文件有:映射类(*.java)、映射文件(*.hbm.xml)和数据库配置文件(*.properties/*.cfg.xml),它们各自的作用如下:
映射类(*.java):它是描述数据库表的结构,表中的字段在类中被描述成属性,将来就可以实现把表中的记录映射成为该类的对象了。
映射文件(*.hbm.xml):它是指定数据库表和映射类之间的关系,包括映射类和数据库表的对应关系、表字段和类属性类型的对应关系以及表字段和类属性名称的对应关系等。
数据库配置文件(*.properties/*.cfg.xml):它是指定与数据库连接时需要的连接信息,比如连接哪种数据库、登录数据库的用户名、登录密码以及连接字符串等。当然还可以把映射类的地址映射信息放在这里。
接下来让我们就一起走进Hibernate的七种映射关系:
1、 单向一对一关联映射(one-to-one):
两个对象之间一对的关系,例如:Person(人)-IdCard(身份证)
有两种策略可以实现一对一的关联映射:
*主键关联:即让两个对象具有相同的主键值,以表明它们之间的一一对应的关系;数据库表不会有额外的字段来维护它们之间的关系,仅通过表的主键来关联。如下图:
单向一对一主键关联例子连接
关键映射代码——在Person端加入如下标签映射:
<class name="Person" table="person"> <id name="id"> <generator class="foreign"> <param name="property">card</param> </generator> </id> <property name="name" column="name" not-null="true"/> <!-- constrained="true"表明该类主键由关联类生成 --> <one-to-one name="card" constrained="true"></one-to-one> </class>
*唯一外键关联:外键关联,本来是用于多对一的配置,但是加上唯一的限制之后(采用<many-to-one>标签来映射,指定多的一端unique为true,这样就限制了多的一端的多重性唯一),也可以用来表示一对一关联关系,其实它就是多对一的特殊情况。如下图:
单向一对一唯一外键关联例子连接
关键映射代码——在Person端加入如下标签映射:
<many-to-one name="card" class="Card" cascade="save-update" unique="true" column="idCard" not-null="true"> </many-to-one>
注意:因为一对一的主键关联映射扩展性不好,当我们的需要发生改变想要将其变为一对多的时候变无法操作了,所以我们遇到一对一关联的时候经常会采用唯一外键关联来解决问题,而很少使用一对一主键关联。
2、 双向一对一关联映射:
对比单向一对一映射,需要在IdCard加入<one-to-one>标签,只影响加载。如下图
双向一对一主键映射关键映射代码——在IdCard端新加入如下标签映射:
<one-to-one name="person" cascade="save-update" ></one-to-one>
双向一对一唯一外键映射关键映射代码——在IdCard端新加入如下标签映射:
<one-to-one name="person"property-ref="idCard"/>
3、 单向多对一关联映射(many-to-one):
多对一关联映射原理:在多的一端加入一个外键,指向一的一端,如下图:
关键映射代码——在多的一端加入如下标签映射:
<many-to-one name="group" class="Group" cascade="save-update" > <column name="groupid" not-null="true"></column> </many-to-one>
4、 单向一对多关联映射(one-to-many)
一对多关联映射和多对一关联映射原理是一致的,都是在多的一端加入一个外键,指向一的一端。如下图(学生和班级):
关键映射代码——在一的一端加入如下标签映射:
<set name="students" cascade="save-update"> <key column="classesid" not-null="true"></key> <one-to-many class="com.org.Student"/> </set>
注意:它与多对一的区别是维护的关系不同
*多对一维护的关系是:多指向一的关系,有了此关系,加载多的时候可以将一加载上来
*一对多维护的关系是:一指向多的关系,有了此关系,在加载一的时候可以将多加载上来
缺陷:因为多的一端Student不知道Classes的存在(也就是Student没有维护与Classes的关系)所以在保存Student的时候关系字段classesid是为null的,如果将该关系字段设置为非空,则将无法保存数据,常用解决办法是改用双向关联映射。
5、 双向一对多关联映射(非常重要):
采用一对多双向关联映射的目的主要是为了主要是为了解决一对多单向关联的缺陷而不是需求驱动的。
一对多双向关联的映射方式:
* 在一的一端的集合上采用<key>标签,在多的一端加入一个外键
* 在多的一端采用<many-to-one>标签
注意:<key>标签和<many-to-one>标签加入的字段保持一直,否则会产生数据混乱
关键映射代码:
在Classes的一端加入如下标签映射:
<set name="students"inverse="true"> <key column="classesid"/> <one-to-many class="com.hibernate.Student"/> </set>
注释:inverse属性
inverse属性可以用在一对多和多对多双向关联上,inverse属性默认为false,为false表示本端可以维护关系,如果inverse为true,则本端不能维护关系,会交给另一端维护关系,本端失效。所以一对多关联映射我们通常在多的一端维护关系,让一的一端失效.
在Student的一端加入如下标签映射:
<many-to-one name="classes" column="classesid"/>
6、 单向多对多映射(many-to-many):
多对多关联映射新增加一张表才完成基本映射,如下图:
关键映射代码——可以在User的一端加入如下标签映射:
<set name="roles" table="t_user_role"> <key column="user_id"/> <many-to-many class="com.hibernate.Role" column="role_id"/> </set>
7、 双向多对多关联映射:
双向的目的就是为了两端都能将对方加载上来,和单向多对多的区别就是双向需要在两端都加入标签映射,需要注意的是:
* 生成的中间表名称必须一样
* 生成的中间表中的字段必须一样
Role(角色)端关键映射代码:
<set name="users" table="t_user_role"> <key column="role_id"/> <many-to-many class="com.hibernate.User" column="user_id"/> </set>
User(用户)端关键映射代码:
<set name="roles" table="t_user_role"> <key column="user_id"/> <many-to-many class="com. hibernate.Role" column="role_id"/> </set>
相关推荐
Hibernate是一种用于Java环境下的持久层框架,它主要解决了对象关系映射的问题。通过将Java对象与数据库表进行映射,可以实现对象与关系型数据库之间的无缝转换。这不仅提高了开发效率,还增强了应用程序的灵活性...
Hibernate关联关系是Java持久化框架Hibernate中的核心概念,它允许我们在数据库中建立对象之间的关系映射,以便在程序中操作对象时,可以自动处理与数据库的交互。本篇将深入探讨Hibernate的四种主要关联关系:一对...
总结来说,"多对一"关系映射是Hibernate的重要特性,理解和熟练掌握其配置和应用,能有效提升Java web开发的效率和质量。通过SSH框架的整合,我们可以更好地实现业务逻辑,创建出稳定、高效的web系统。
通过本文的介绍,我们不仅了解了Hibernate关系映射的基本概念和常用标签,还深入探讨了几种常见的关系类型及其映射方法。理解并熟练掌握这些知识将极大地帮助开发人员利用Hibernate进行高效的数据持久化操作。在未来...
### Hibernate知识点总结 #### 一、Hibernate概述 Hibernate是一个开源的ORM(Object Relational Mapping,对象关系映射)框架,用于Java应用与关系型数据库之间的交互。它通过使用描述对象和数据库之间映射的元...
总结来说,Hibernate通过XML映射文件或注解方式,将数据库表的关系映射为Java对象间的关联,使得数据操作更加直观和便捷。对于每种关系,都需要正确配置外键或中间表的映射,以确保数据的一致性和完整性。在实际开发...
在Java的持久化框架Hibernate中,集合映射是将数据库中的表关系映射到对象的集合属性上,以便实现对象关系映射(ORM)。本文将深入探讨Hibernate中的四种主要集合映射类型:Set、List、Array和Map,以及它们在实际...
总结,一对一映射是Hibernate中的一个重要特性,它使得Java对象与数据库记录之间的对应关系更为灵活。理解并熟练运用一对一映射,能够帮助开发者更好地设计和实现复杂的业务逻辑,提高代码的可读性和维护性。通过...
根据给定的文件内容,我们可以总结出一系列...通过上述总结,我们可以看出Hibernate在处理对象关系映射方面提供了丰富的功能和支持。对于想要深入学习Hibernate的开发者来说,了解这些基本概念和技术细节是非常重要的。
“对应关系有一对一,多对一,多对多”则提示我们将深入学习这三种常见的数据库关联关系在Hibernate中的实现方式。 **Hibernate ORM详解** Hibernate是Java平台上的一个开源ORM框架,它通过提供数据持久化服务,...
在IT行业中,数据库管理和对象关系映射(ORM)框架是至关重要的组成部分,特别是对于Java开发者而言,Hibernate是一个广泛使用的ORM工具。本篇文章将深入探讨如何在Hibernate中映射树形结构,这是一种处理复杂数据...
在Java世界中,Hibernate是一个非常流行的ORM(对象关系映射)框架,它允许开发者使用面向对象的方式来操作数据库。本文将深入探讨Hibernate5中的映射关系,主要包括多对多(Many-to-Many)和一对多(One-to-Many)...
本文主要总结了Hibernate中常见的注解用法,涵盖了类级别和属性级别的注解,以及与主键和非主键相关的注解。 1. 类级别注解: - `@Entity`: 这个注解是必不可少的,它告诉Hibernate一个Java类是一个实体,可以映射...
在Java持久化技术中,Hibernate是一个非常重要的框架,它提供了对象关系映射(ORM)功能,使得开发人员能够用面向对象的方式操作数据库。本篇文章将深入探讨Hibernate中的三种主要关联关系:一对一、一对多和多对多...
总结起来,"每个类都对应一张表"的继承映射策略在Hibernate中是一种直接且易于理解的方法,适合那些每个类都有独特属性的情况。然而,它可能不适合所有场景,特别是当子类众多或者需要减少数据冗余时。在实际应用中...
在Java开发中,Hibernate作为一款强大的对象关系映射(ORM)框架,极大地简化了数据库操作。本文将深入探讨Hibernate中实体映射的一对一关联关系的两种实现方式:共享主键方式和唯一外键方式。 首先,我们要理解...
本总结将围绕Hibernate的核心概念、关键功能和常见用法进行详细阐述。 **一、Hibernate概述** Hibernate是Java社区中广泛使用的开源ORM框架,它允许开发者使用面向对象的方式来操作数据库,通过XML或注解定义对象与...
- **简介**:映射文件用于定义实体类与数据库表之间的映射关系,是Hibernate实现对象关系映射的核心。 - **属性详解**: - `<property>` 元素用于指定实体类属性与数据库表字段之间的映射关系。 - `name` 属性:...