一对一关系:
一对一的关系有一个先后和主次, 谁的电脑 (电脑 依赖 人),谁的书(书 依赖 人),哪儿的人(人 依赖 地区)。
这些都能够唯一确定一个主次的关系, 都是 从 依赖 主 而生。
所以 主从表的关系应该是:
主表,先有该表才能有从表的数据。
从表,引用主表的标识列。
所以 映射到实体类的设计时
主表 对应的类应该设计一个属性存放 从表对象,这个属性我们称为关系属性。
从表 对应的类应该设计一个属性存放 主表的对象。(关系属性)
所以 配置映射关系时:
<one-to-one name="关系属性" class="关系对应的类" foreign-key="关系对应的主键">
如果是 从表 要加入 constrained="true" 属性表明从表是 受 主表约束的。主表数据不存在则从表数据也要不存在。
cascade = none 在 持久化操作 从表时 不能影响到主表。比如删除从表数据,不能同时删除主表的数据。
lazy: 懒加载,默认为 true。即不立刻将关系属性加载。
如果我们配置了 false ,当查询当前对象时,就会关联查询与它有关系的表。
比如,部门 有 员工这个属性。 当lazy=false时,就会立刻将该部门下的所有员工都查到。
并封装进这个属性供我们后续使用。然而这样很耗费时间的,如果部门下的员工很多呢。。。
而lazy=true ,则不会立即查询。当我们手动调用时 比如 dept.getEmps() 时,Hibernate才
会进行加载,然而这个时候与 查询相关的 Session 不能关闭,否则就报错了。
人 身份证
public class Person{
private Integer pId;
private String name;
private String age;
private Integer gender;
private IdCard idcard; // 声明一个属性来存 关系对象
}
public class IdCard implements{
private Integer cId;
private String cNum;
private Date startTime;
private Date endTime;
private Person person; // 声明一个属性来存 关系对象
}
-------------------------------- xml --------------------------------
<class="Person" table="person">
<id>..
<property>..
<one-to-one name="idcard" cascade="all" class="org.itfuture.www.po.Idcard" foreign-key="cid"/>
</class>
<class="IdCard" table="idcard">
<id name="cId" type="integer" column="cId">
<generator class="foreign">
<param name="property">person</param> //引用该类中 person 对象中的 标识符属性
</generator>
</id>
<property>..
//身份证 受 人的约束,先有人 后 有身份证。 cascade=None 身份证作废但人的信息还是有效的
<one-to-one name="person" cascade="none" class="Person" foreign-key="cId" constrained="true"/>
</class>
需要注意的是:
无论是 一对一 一对多 多对一 还是 多对对关系
我们在设计类和配置映射文件时,对于这些关系属性一定要慎重,如果我们将关系属性关联成为一个对象作为属性的话,我们在配置的时候就要直接配置该属性,而不能即存在一个外键引用又存在一个属性对象。
比如,在员工与部门关系中。在员工属性设置时,员工表有一个外键 deptId 指向部门表的主键。
在设计类的时候 ,我们要将这个属性 设计称为一个 类 属性即 dept 用于存储一条部门表的记录。
而不能同时存在两个属性 deptId 和 dept ,这样在配置中我们就没法进行关联了。
因为在关联时, dept 肯定用到了这个 deptId 这一列,表明该列已经配置了,这样我们就不能单独在配置一个
属性,名叫 deptId 这样就重复了 就会出错。
分享到:
相关推荐
总结一下,EJB3的一对一关系映射是通过注解来实现的,它允许实体之间建立一对一的关联。通过Ext2和Ext2.0这样的扩展,开发者可以进一步定制和增强EJB3的功能。理解这些概念并熟练运用,将有助于构建健壮、高效的企业...
Springboot 中 MyBatis 表关联映射关系(一对一) 在 Springboot 中,MyBatis 提供了强大的表关联映射关系机制,可以实现一对一、多对一、多对多等各种关联关系。在本文中,我们将详细介绍 Springboot 中 MyBatis ...
一对一映射在数据库设计中是指两个表之间存在一对一的关系,例如,一个员工可能只有一个部门,一个部门也只对应一个员工。在iBATIS中,这种关系可以通过配置XML映射文件或者注解来实现。 **一对一映射的基本概念:*...
一对一关系映射是数据库设计中常见的一种关联类型,表示一个实体与另一个实体之间存在唯一的对应关系。 首先,我们需要理解一对一关系的基本概念。在数据库设计中,一对一关系意味着两个表中每一条记录都唯一地对应...
单向一对一映射通常涉及一个实体持有另一个实体的引用,而双向一对一映射则意味着两个实体都可以互相引用。这种关联关系在数据库层面通常通过主键外键约束来实现,但在代码层面则通过注解来表达。 首先,我们需要...
本话题主要探讨的是Hibernate中的一对一关联映射,这是一种将数据库中的单个表映射到Java对象模型中单个类的关系映射技术。通过注解方式实现一对一关联映射,可以避免传统的XML配置文件,使得代码更加简洁、易读。 ...
一对一关联映射指的是两个实体类之间存在一对一的关系,即一个实体对应另一个实体的唯一实例。在MyBatis中,我们可以使用`<association>`标签来配置这种关系。例如,假设我们有`User`和`Address`两个实体,一个用户...
下面我们将详细讲解如何在Hibernate中进行一对一映射的配置。 **一、XML文件配置** 1. **主键关联(Primary Key Join)** 主键关联是最简单的一对一映射方式,两个实体类共享同一个主键。在XML配置文件中,我们...
在Java的持久化框架Hibernate中,一对一(One-to-One)关联映射是一种常见的关系数据库模型映射方式。这种关联通常发生在两个实体之间,且每个实体都只有一个对应的实例。本篇文章将详细探讨双向一对一主键关联映射...
3. **多对一(ManyToOne)**: 类似于一对一关系,只是方向相反,一个实体可以属于多个其他实体。 4. **多对多(ManyToMany)**: 一个实体可以与多个其他实体有关系,反之亦然。这通常通过中间表实现,可以使用`@...
一、一对一关系映射(One-to-One) 一对一关系是指一个实体对应另一个实体的唯一实例。在Hibernate中,可以通过`@OneToOne`注解来实现。这种关系可以通过外键或者联合主键来建立。例如,一个用户可能只有一个唯一的...
例如,用户和其个人资料的关系通常是一对一,而用户与订单则是一对多,用户角色关系是多对多。 总之,Hibernate的ORM映射关系配置是Java Web开发中的核心技能之一,通过合理的配置,我们可以轻松地处理复杂的数据库...
关系映射主要包括一对一、一对多、多对一和多对多四种关系。 2. **配置文件**:在Hibernate中,`hibernate.cfg.xml`是核心配置文件,它包含了数据库连接信息、实体类映射等设置。在案例三中,我们需要关注这个文件...
对象关系映射(ORM)是一种概念性的、易于理解的模型化数据的方法,基于三个核心原则:简单、传达性、精确性。ORM 方法论提供了概念性的模型化数据的方法,基于数据模型创建正确标准化了的结构。ORM 专门被设计为...
在这个名为"MyBatis_关系映射之一对多-src.zip"的压缩包中,我们很显然会探讨MyBatis中的一对多关系映射这一核心概念。 在数据库设计中,一对多关系是常见的实体关系类型,意味着一个父表(或父实体)可以与多个子...
单向一对一映射意味着在一个实体类中定义了与另一个实体的关联,而在另一个实体类中没有相应的引用。这可以通过以下步骤实现: 1. **定义实体类**:首先,我们需要创建两个实体类,比如`Person`和`Profile`,每个...
在现实世界中,两个实体之间可能存在一对一的关系,例如一个人只有一个身份证。在Hibernate中,我们可以使用`@OneToOne`注解来实现这种关系。配置时需要指定关联的字段或属性,以及可选的`fetch`策略(默认为懒加载...
一对一(OneToOne)关联映射是Hibernate提供的一种对象关系映射策略,它允许我们将数据库中的两个表进行一对一的对应。这篇博客将深入探讨Hibernate中的一对一关联映射的实现方法和注意事项。 **知识点详解:** 1. ...
**一对一映射(One-to-One)** 一对一映射通常用于两个实体之间存在唯一对应的关系,例如一个银行账户只能关联一个客户信息。在Hibernate中,我们可以通过`@OneToOne`注解来实现这种关系。配置包括指定关联字段、...
本主题将深入探讨Hibernate中的一对多和多对一映射关系,这两种关系在实际的业务场景中非常常见。 首先,我们来理解一下一对多映射(One-to-Many Mapping)。在数据库设计中,一对多关系意味着一个父记录可以与多...