二、1—1
无论是单向1-1映射关联,还是双休1-1映射关联,都有三种映射策略:基于主键、基于外键、采用连接表。
1、单向1-1映射关联
1.1、基于主键的单向1-1映射关联
对于基于主键的单向1-1关联,基于主键关联的持久化类不能拥有自己的主键生成器策略,它的主键由关联实体来负责生成。
是根据他自己的person属性来获得的。即他通过自身的一个getPerson()方法来获得Person对象。然后通过Person对象中的getID()方法获得id,然后赋值给自身id。这样就可以不需要自己来生成id。
采用基于主键的1-1关联时,应使用<one-to-one.../>元素来映射关联实体,配置<one-to-one.../>元素时需要指定一个name属性。
实例(Person<--IDCard)
Person
IDCard:
映射文件:
Person.hbm.xml
IDCard.hbm.xml
在上面的映射文件中,采用这种关联映射策略是,idCard表作为从表,此时idCard表的主键将没有自己的主键生成策略。他是根据person表中的主键来生成的。同时从表(idCard)里记录的主键将会与主表(person)里的记录保存一致。
IDCard中的id既是主键也是外键。那么idCard表如何通过person表来生成主键的呢?
foreign生成器中有一个元素:property。这个元素代表了该表的外键是从哪一个属性中获得的。通过上面的配置可以发现idCard表的外键是从person属性中获得的。它的外键就是通过person属性中的getId获得id,然后将该id直接赋给id。
使用constrained="true"表明该类对应表和被关联的对象所对应的数据库表之间通过一个外键引用对主键进行约束。
通过上面的配置后,就可以对两个实体进行操作了:
1.2、基于外键的单向1-1映射关联
基于外键的关联映射与一般的N-1关联映射没有多大区别,只需要将<many-to-one.../>元素中增加unique="true"属性即可。如下:
unique="true"代表了idCard表的personid外键列上增加了唯一约束--这样就完成基于外键的单向1-1映射了。
其他的配置文件和持久化类都不需要做修改。
1.3、有连接表的单向1-1映射关联
和上面差不多,只需要在有连接表的N-1关联映射中的<many-to-one.../>元素增加一个unique="true"即可。如下:
2、双向1-1关联映射
对于双向的1-1关联需要让两个持久化列都增加引用关联实体的属性,并为该属性提供setter和getter方法。持久化类:如上。
2.1基于主键的双向1-1关联映射
基于主键的双向1-1关联映射同样需要在一端的主键生成器策略使用foreign策略,表明将根据对方的主键来生成自己的主键,本实体不能拥有自己的主键生成策略。另一端需要使用<one-to-one.../>元素用来映射关联实体,否则就变成了单向的。映射文件如下:
Person.hbm.xml
IDCard.hbm.xml
对于操作这个两个实体增加同时。因为可以通过两边来访问,所以这里就演示查询
这里查询分为两种:基于主表查询和基于从表查询
基于主表查询(通过主表查询从表记录)
我们知道对于N-1关联查询的时候,系统会产生两条sql查询语句来检索从表对象:一条先查询主表,然后根据外键从从表中获取相对应的记录。但是对于1-1关联时,它并不是产生两条sql语句来查询。而是一条sql语句,通过外连接来连接两张表的。如下
基于从表查询(通过从表查询主表)
通过从表查询主表与通过主表查询从表又有点不同了。在这里它不再是产生一条sql语句,而是两条。如下:
它会先查询从表,获取记录,然后再通过外连接方式连接两张表根据personID获取记录。
2.2基于外键的双向1-1关联映射
对于基于外键的双向1-1关联映射。外键可以存放任意一边。需要存放外键的一端,需要增加<many-to-one../>元素。同时也需要添加unique="true"属性。
对于双向单位1-1关联映射,两个实体原本是处于平等状态的。但是当我们选择一个表来增加外键后,该表就变成了从表,另一个表变成主表。
另一端需要使用<one-to-one../>元素,该元素需要使用name属性指定关联属性名,同时也需要使用property-ref属性来指定引用关联类的属性。property-ref的值是从表中的引用属性。
映射文件如下:
Person.hbm.xml
IDCard.hbm.xml
2.3有连接表的双向1-1关联映射
采用这个方式是非常少的,因为这中情况映射相当复杂,数据模型繁琐,一般不推荐采用这种策略。
双向1-1关联两端都需要使用<join.../>元素指定连接表,<join../>元素的table属性用于指定连接表的表名,所有两端的table属性值应该是一致的。同时两个也需要增加key元素映射连接表的外键列,还需要增加<many-to-one../.>元素映射关联属性,两个<many-to-one.../>元素都需要增加unique="true"属性。注意这里两端的key元素和<many-to-one../>中column的属性值应该是相反的。
同时为了让hibernate在连接表的两个数据列上增加唯一约束,映射文件应该为两个<key.../>元素指定unique="true"。
当使用连接表来建立1-1关联关系时,两个实体应该是绝对的平等,不存在任何的主从约束关系,hibernate映射他们的连接表时,将会选择某一个外键作为连接表的主键--因此两个持久化类的映射文件依然不是完全相同的。映射文件必须在一端的<join.../>元素中指定inverse="true",而另一端则指定option="true"。下面是两个映射文件
Person.hbm.xml
IDCard.hbm.xml
分享到:
相关推荐
### Hibernate映射笔记详解 #### Hibernate映射文件与配置关系 Hibernate映射是ORM(对象关系映射)框架中的一项关键技术,它允许开发者在数据库表和Java对象之间建立映射关系,从而简化了数据访问层的开发工作。...
【标题】"hibernate学习笔记-01helloworld"主要涵盖了Hibernate框架的基础入门知识,是初学者了解和掌握Hibernate的重要起点。Hibernate是一款强大的Java对象关系映射(ORM)框架,它简化了数据库操作,使得开发者...
Hibernate更多地关注对象和数据库表的映射,以及抽象出ORM操作,而Mybatis则更接近原生SQL,灵活性更高,通过映射文件可以精确控制SQL的执行。 以上知识点覆盖了Hibernate和Mybatis的配置、基本操作、查询、注解...
12. **实体类与映射文件**: 实体类如SuperManager对应数据库中的表supermanager,属性与表字段一一对应,通过Hibernate的映射文件(.hbm.xml)建立这种关系,使得Java对象可以直接操作数据库。 13. **Hibernate ...
本篇笔记主要聚焦于JPA的关联映射,这是JPA中一个重要的概念,用于定义实体之间的关系。 关联映射允许我们将数据库中的表关系映射到Java对象的关联上。在Hibernate中,这些关系通常通过XML配置文件来定义,而在JPA...
### Hibernate—我的Hibernate学习笔记 #### 一、对象持久化的理论与实践 ##### 对象持久化概念 对象持久化指的是将内存中的对象状态保存至外部持久性存储设备(如硬盘),以便于日后需要时能够恢复其状态。这一...
007---Hibernate映射标签和属性 - `<generator>`元素:用于定义主键生成策略,如increment、sequence、identity等。 - `<property>`标签:用于映射类的普通属性,包含name、type、column等属性。 例如,一个简单的...
J2EE三大框架_笔记 共分三块: J2EE框架_笔记_a: 1-JSP+JDBC_假分页笔记 2-JSP+JDBC_真分页(基于Oracle数据库分页)笔记 3-JSP+DAO和MVC+DAO(基于MySQL数据库分页...54留言管理程序_Struts + Spring + Hibernate笔记
J2EE三大框架_笔记 共分三块: J2EE框架_笔记_a: 1-JSP+JDBC_假分页笔记 2-JSP+JDBC_真分页(基于Oracle数据库分页)笔记 3-JSP+DAO和MVC+DAO(基于MySQL数据库分页...54留言管理程序_Struts + Spring + Hibernate笔记
J2EE三大框架_笔记 共分三块: J2EE框架_笔记_a: 1-JSP+JDBC_假分页笔记 2-JSP+JDBC_真分页(基于Oracle数据库分页)笔记 3-JSP+DAO和MVC+DAO(基于MySQL数据库分页...54留言管理程序_Struts + Spring + Hibernate笔记
【Java相关课程系列笔记之十四Hibernate学习笔记】 Hibernate是一个开源的对象关系映射(ORM)框架,它极大地简化了Java应用程序对数据库的操作。本笔记将详细阐述Hibernate的核心概念、使用方法和特性。 一、...
Hibernate学习笔记整理 以下是 Hibernate 框架的详细知识点: Hibernate 介绍 Hibernate 是一个 ORM(Object-Relational Mapping)框架,用于将 Java 对象映射到数据库表中。它提供了一个简洁的方式来访问和操作...
6.1 案例分析:结合黑马程序员的day1至day4的讲义和笔记,深入理解在实际项目中如何应用Hibernate,解决具体问题。 总结,Hibernate作为强大的ORM框架,为Java开发者提供了便利,通过理解并熟练掌握其核心概念、...
本笔记将详细介绍SSH映射文件配置的三个核心部分:基础配置参数使用、多对一映射以及一对多映射。 **基础配置参数使用** SSH的基础配置通常位于`~/.ssh/config`文件中,此文件可以定义不同的主机别名和相关设置。...
### 马士兵Hibernate学习笔记知识点总结 #### 一、课程内容概览 - **HelloWorld**:通过简单的示例程序介绍如何启动一个基于Hibernate的Java项目。 - **Hibernate原理模拟**:解释O/R Mapping的概念及其重要性。 -...
【Spring 3.x 读书笔记-1】 Spring 框架是 Java 开发中的核心组件,尤其在企业级应用开发中扮演着至关重要的角色。Spring 3.x 版本是其发展过程中的一个重要里程碑,引入了许多新特性和增强功能。在本篇读书笔记中...
Hibernate是一个在Java环境中广泛使用的数据持久化工具,它支持对象关系映射(ORM)技术,将Java对象映射到关系型数据库的表中。Hibernate允许开发者通过面向对象的方式来操作数据库,避免了直接使用SQL语句的繁琐...
【Hibernate学习笔记(1-13)】是传智播客李勇的教程,涵盖了Hibernate框架的基础到进阶内容。Hibernate是一个流行的ORM(对象关系映射)框架,它旨在解决Java面向对象编程与关系型数据库之间的模型不匹配问题,即...