要实现Hibernate中一对一的数据关联关系有两种方式:
1, 主键关联,即两个表共享一个主键
2,唯一外键关联,即在一个表中记录一个外键字段,参照另一张表的主键
一、主键关联
1. 首先创建用户表(person) 和身份证表(idcard),二者是一对一的关系
----用户表----
create table Person(
id varchar2(32) primary key,
name varchar2(32) not null,
age number(3) not null
)
-----身份证表-----
create table idcard(
id varchar2(32) ,
serial VARCHAR(18) NOT NULL , //身份证号码
expiry number(3), //使用年限
foreign key(id) references person(id) on delete cascade
)
2,创建两个表对应的pojo
public class Person {
//主键
private String id = "";
//用户名
private String name = "";
//年龄
private int age = 0;
//身份证对象
private Idcard idcard = null;
..............
}
public class Idcard {
//主键
private String id = "";
//号码
private String serial = "";
//使用年限
private int expiry = 0;
//用户对象
private Person Person = null;
............
}
3,分别建立两张表的映射关系
Person.hbm.xml
<?xml version="1.0" encoding='UTF-8'?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping package="包名">
<class name="Person" table="Person">
<id name="id" column="id" type="string">
<generator class="uuid.hex"></generator>
</id>
<property name="name" column="name" type="string"/>
<property name="age" column="age" type="int"/>
<one-to-one name="idcard" class="包名.Idcard" cascade="all" outer-join="true"/>
</class>
</hibernate-mapping>
Idcard.hbm.xml
<?xml version="1.0" encoding='UTF-8'?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping package="包名">
<class name="Idcard" table="Idcard">
<id name="id" column="id">
<generator class="foreign">
<param name="property">person</param>
</generator>
</id>
<property name="serial" column="serial" type="string"/>
<property name="expiry" column="expiry" type="int"/>
<one-to-one name="person" class="Person" constrained="true"/>
</class>
</hibernate-mapping>
二、唯一外键关联
1. 首先创建用户表(person) 和身份证表(idcard),二者是一对一的关系
----用户表----
create table person(
pid varchar2(32) primary key,
name varchar2(32) not null,
age number(3) not null
)
----身份证表----
create table idcard(
id varchar2(32) ,
serial VARCHAR(18) NOT NULL ,
expiry number(3),
pid varchar2(32) ,
foreign key(id) references person(pid) on delete cascade
)
2.创建两张表对应的pojo
public class Person {
//主键
private String pid = "";
//用户名
private String name = "";
//年龄
private int age = 0;
//身份证对象
private Idcard idcard = null;
..............
}
public class Idcard {
//主键
private String id = "";
//号码
private String serial = "";
//使用年限
private int expiry = 0;
//用户对象
private Person person = null;
............
}
3.分别建立两张表的映射关系
Person.hbm.xml
<?xml version="1.0" encoding='UTF-8'?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping package="包名">
<class name="person" table="person">
<id name="pid" column="pid" type="string">
<generator class="uuid.hex"/>
</id>
<property name="name" column="name" type="string"/>
<property name="age" column="age" type="int"/>
<one-to-one name="idcard" class="Idcard" property-ref="person"/>
</class>
</hibernate-mapping>
Idcard.hbm.xml
<?xml version="1.0" encoding='UTF-8'?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping package="包名">
<class name="Idcard" table="idcard">
<id name="id" column="id" type="string">
<generator class="uuid.hex"/>
</id>
<property name="serial" column="serial" type="string"/>
<property name="expiry" column="expiry" type="int"/>
<many-to-one name="person" class="Person" column="pid"/>
</class>
</hibernate-mapping>
分享到:
相关推荐
在Hibernate中,设置一对一关联关系可以帮助我们更好地管理和操作这些具有唯一对应关系的数据。 1. **配置一对一关联** - 在两个相关的实体类中,我们需要定义一个属性,该属性的类型是另一个实体类的实例。 - ...
在数据库设计中,一对一关系是指两个表中的记录之间存在一对一的对应关系,例如一个员工对应一个部门。在MyBatis中,我们可以通过以下方式进行一对一映射: 1. **使用resultMap**:在Mapper XML文件中定义一个...
本话题主要讨论的是“数据表的关联关系图”,特别是父表与子表的关联关系,涉及到的核心概念包括主键、外键、父表和子表,以及多对一关联。 首先,我们来理解什么是主键和外键。主键(Primary Key)是表中的一个或...
例如,在用户和订单系统中,一个用户可以有多个订单,这就是一对一关系;而在订单和商品的关系中,一个订单对应一个商品,是多对一关系。通过合理配置Hibernate的关联映射,可以有效地处理这些关系,简化代码。 五...
一对一关联(OneToOne)在关系型数据库设计中是一种常见的实体关系模型,用于表示两个表之间的一种强关联,其中一张表的某条记录唯一对应另一张表的一条记录。这种关联通常通过外键(Foreign Key)来实现,确保数据...
在本主题中,我们将深入探讨如何利用Hibernate实现一对一(One-to-One)单向关联关系,并通过源码分析来理解其工作原理。 **一对一关联关系**在数据库设计中表示两个表之间存在唯一的对应关系,例如,一个人可能...
本实例将深入探讨Hibernate中的三种基本关联关系:一对一(One-to-One)、一对多(One-to-Many)以及多对多(Many-to-Many)的实现方式。 1. **一对一关联**: 一对一关联通常出现在两个实体之间存在唯一对应关系...
标题"Hibernate ORM - 一对一连接表关联关系" 提示我们,这里主要讨论的是Hibernate ORM框架在处理数据库中一对一(One-to-One)关联映射的方法。Hibernate是一个流行的Java对象关系映射(ORM)工具,它允许开发者用...
在Java的持久化框架Hibernate中,一对一(One-to-One)关联关系是常见的一种实体关系映射。本主题将深入探讨如何使用Hibernate通过主键来实现一对一的单向关联关系,并提供相关的源码分析。 首先,我们需要理解一对...
一对一双向关联关系指的是两个实体类之间存在一对一的关系,且在各自的类中都可以直接访问对方。这种关联可以通过注解或XML配置来实现。在Hibernate中,通常使用`@OneToOne`注解来定义一对一关系,而双向关联则意味...
在这个“hibernate关联关系实例”中,我们将深入探讨四种基本的关联关系:一对一(One-to-One)、一对多(One-to-Many)、多对一(Many-to-One)以及多对多(Many-to-Many),同时也会涉及Hibernate查询语言(HQL)...
这种关联关系可以是单向的,也可以是双向的,而这里的"hibernate关联关系之一对一双向关联"着重讨论的是后者。双向关联意味着两个实体类都可以直接访问对方,提供了更方便的数据操作。 在Hibernate中,一对一双向...
在一对一(One-to-One)主键关联关系中,两个实体类之间存在唯一对应的关系,通常一个实体对应另一个实体的一个实例,这种关系可以通过共享主键来实现。 在Hibernate中,一对一的主键关联关系可以通过以下几种方式...
在Java的持久化框架Hibernate中,一对一(OneToOne)关系是一种常见的对象关系映射(ORM)配置,用于表示两个实体类之间的一种唯一关联。在这个场景中,“hibernate使用主键关联的一对一关系”指的是通过共享主键来...
由此可知,客户数据和订单数据是一对多的关系;那这样的话,问题就来了,我到底以订单中的哪一条数据为准呢?经过协商后一致同意以最新的一条数据为准; 数据测试初始化SQL脚本 DROP TABLE IF EXIST
【hibernate的关联关系映射】在...无论是一对一还是多对一/一对多,都可以根据业务需求选择合适的关联类型,并通过Java代码和XML配置文件实现数据持久化。理解这些关联关系对于开发高效、健壮的Java应用程序至关重要。
本篇将深入探讨Hibernate的四种主要关联关系:一对一(OneToOne)、一对多(OneToMany)、多对一(ManyToOne)和多对多(ManyToMany),并结合实例来阐述每种关系的配置和使用。 1. **一对一关联(OneToOne)** 一...
SpringBoot 中 MyBatis 表关联映射关系(一对多嵌套:结果方式) 在 SpringBoot 中,MyBatis 是一个非常流行的持久...最后,我们可以使用 MyBatis 来映射 Lesson 和 Stu 之间的一对多关联关系,实现数据的持久化操作。
通过这种方式,可以在不显式操作数据库的情况下,实现一对多关联关系的数据一致性管理。 总结来说,使用Hibernate映射一对多关联关系涉及到实体类的设计、数据库关系模型的构建以及映射文件的编写等多个方面。正确...