Hibernate5.2之一对一外键关联(五)
Hibernate5.2之一对一外键关联(五)
一.简介
上篇文章中笔者介绍了Hibernate关联关系中的一对一外键关联,本篇博客将介绍一对一外键关联。其实我们回过头想一想,外键关联其实就是一对多关联关系中将多的一方简化为一个,就是我们本文所要介绍的一对一的外键关联。
二.外键关联
2.1数据库表的创建
create table people (
id varchar2(255 char) not null,
name varchar2(255 char),
sex varchar2(255 char),
primary key (id)
); create table cards (
id varchar2(255 char) not null,
card_num varchar2(255 char),
people_id varchar2(255 char),
primary key (id)
);
2.2 hbm文件的方式
public class People {
private String id;
private String name;
private String sex;
private IdCard idCard;
//setter and getter
}
public class IdCard {
private String id;
private String cardNum;
private People people;
//setter and getter
}
People.hbm.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping>
<class name="com.demo.hibernate.one2one.People" table="people">
<id name="id" type="string">
<generator class="uuid"></generator>
</id> <property name="name" type="string" column="name"></property>
<property name="sex" type="string" column="sex"></property> <one-to-one name="idCard" class="com.demo.hibernate.one2one.IdCard" cascade="all" property-ref="people"></one-to-one>
</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://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping>
<class name="com.demo.hibernate.one2one.IdCard" table="cards">
<id name="id" type="string" column="id">
<generator class="uuid"></generator>
</id> <property name="cardNum" type="string" column="card_num"></property>
<many-to-one name="people" class="com.demo.hibernate.one2one.People" column="people_id" unique="true"></many-to-one>
</class>
</hibernate-mapping>
2.3 注解的方式
People.java
@Entity
@Table(name="people")
public class People { @Id
@Column(name="id")
@GenericGenerator(name="uuidGenerator", strategy="uuid")
@GeneratedValue(generator="uuidGenerator")
private String id; @Column(name="name")
private String name; @Column(name="sex")
private String sex; @OneToOne(cascade={CascadeType.ALL}, fetch=FetchType.LAZY, mappedBy="people")
private IdCard idCard; //setter and getter
}
IdCard.java
@Entity
@Table(name="cards")
public class IdCard { @Id
@Column(name="id")
@GenericGenerator(name="uuidGenerator", strategy="uuid")
@GeneratedValue(generator="uuidGenerator")
private String id; @Column(name="card_num")
private String cardNum; @ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="people_id")
private People people; //setter and getter
}
2.4 代码测试
A.保存
@Test
public void save(){
Transaction tx = session.beginTransaction();
People people = new People();
people.setName("AAA");
people.setSex("男"); IdCard idCard = new IdCard();
idCard.setCardNum("889900");
idCard.setPeople(people); people.setIdCard(idCard);
session.save(people); tx.commit();
}
B.get
@Test
public void get(){
People people = session.get(People.class, "402882e6564a70fa01564a70fbd40000");
System.out.println("此时已经发送了SQL语句");
System.out.println(people.getName() + "::" + people.getSex());
IdCard idCard = people.getIdCard();
System.out.println(idCard.getCardNum());
}
C.load
@Test
public void load(){
People people = session.load(People.class, "402882e6564a70fa01564a70fbd40000");
System.out.println("此时没有发送任何的SQL语句");
System.out.println(people.getName() + "::" + people.getSex());
System.out.println("=============");
IdCard idCard = people.getIdCard();
System.out.println(idCard.getCardNum());
}
D.delete
@Test
public void delete(){
People people = new People();
people.setId("402882e6564a7c1501564a7c16d80000"); IdCard card = new IdCard();
card.setId("402882e6564a7c1501564a7c16e50001"); people.setIdCard(card);
Transaction tx = session.beginTransaction();
session.delete(people);
tx.commit();
}
E.update
@Test
public void update(){
Transaction tx = session.beginTransaction();
People people = new People();
people.setId("402882e6564a70fa01564a70fbd40000");
people.setName("YYYY");
people.setSex("男");
session.update(people);
tx.commit();
}
Hibernate5.2之一对一外键关联(五)的更多相关文章
- Hibernate5.2之一对一主键关联(四)
Hibernate5.2之一对一主键关联(四) 一.简介 一对一关联关系分为两种:a.主键关联:b. ...
- Hibernate,关系映射的多对一单向关联、多对一双向关联、一对一主键关联、一对一外键关联、多对多关系关联
2018-11-10 22:27:02开始写 下图内容ORM.Hibernate介绍.hibername.cfg.xml结构: 下图内容hibernate映射文件结构介绍 下图内容hibernate ...
- Java基础-SSM之mybatis一对一外键关联
Java基础-SSM之mybatis一对一外键关联 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.准备测试环境(创建数据库表) 1>.创建husbandsfk和wife ...
- hibernate5(12)注解映射[4]一对一外键关联
在实际博客站点中,文章内容的数据量非常多,它会影响我们检索文章其他数据的时间,如查询公布时间.标题.类别的等. 这个时候,我们能够尝试将文章内容存在还有一张表中,然后建立起文章--文章内容的一对一映射 ...
- Hibrenate关系映射(一对一外键关联)
一.一对一(单向):使用外部索引将其中的一个类作为parent,相对应的一个就是子类,并且参照父 类的主键ID来生成数据库表.(比如:可以将husband中设置一个wife_id对应wife中的主键i ...
- hibernate一对一外键双向关联
关联是类(类的实例)之间的关系,表示有意义和值得关注的连接. 本系列将介绍Hibernate中主要的几种关联映射 Hibernate一对一主键单向关联Hibernate一对一主键双向关联Hiberna ...
- hibernate一对一外键单向关联
关联是类(类的实例)之间的关系,表示有意义和值得关注的连接. 本系列将介绍Hibernate中主要的几种关联映射 Hibernate一对一主键单向关联Hibernate一对一主键双向关联Hiberna ...
- Entity Framework - 理清关系 - 基于外键关联的单向一对一关系
注:本文针对的是 Entity Framework Code First 场景. 之前写过三篇文章试图理清Entity Framework中的一对一关系(单相思(单向一对一), 两情相悦(双向一对 ...
- hibernate一对一双向外键关联
一对一双向外键关联:双方都持有对方的外键关联关系. 主控方和一对一单向外键关联的情况是一样的,主要的差异表现为,被空方需要添加: @OneToOne(mappedBy="card" ...
随机推荐
- 关于 jsp 解析特殊字符的问题
在项目中了 使用了一个UI封装好 的插件 经测试了可以返回一些特殊字符,但是因为是特殊字符,导致了jsp解析出错,使用了Jquery来添加了dom结构,添加完之后,Ui控件进行初始化的时候报错了,原因 ...
- Android 简易崩溃日志保存
仅仅做了简单的保存到了本地而已: 根据需要可以继续增加功能: 下一次启动上传到服务器: 增加应用版本,机型系统版本信息等: public class CrashSaver { public stati ...
- linux编译c文件
1.创建.c文件,比如在firstmake文件夹创建了一个a.c文件,那么编译语句为: gcc -o firstmake a.c //格式为文件夹名 文件名 2.然后就会生成一个firstmake.o ...
- RabbitMQ - TcpConnection析构引发的一次handshake_timeout
使用RabbitMQ时,连接rabbit-server一直连接失败,代码没有任何错误提示.但是通过rabbitmqctl始终查询不到连接以及创建的queue等信息. 官方的文件demo里面也没有Tcp ...
- Arduino利用TimerOne库产生固定频率和占空比的方波
TimerOne地址: https://code.google.com/archive/p/arduino-timerone/downloads ex: #include "TimerOne ...
- Bullet的学习资源(用Doxygen生成API文档)
Bullet 全称 Bullet Physics Library,是著名的开源物理引擎(可用于碰撞检测.刚体模拟.可变形体模拟),这里将bullet的学习资源整理一下,希望能帮助入门者少走弯路. 看下 ...
- java虚拟机之引用
强引用: 类似:object A=new Object();这样的引用,只要强引用还存在,垃圾回收期就永远不会回收被引用的对象,eg:这里的new Oject(). 软引用: 一些还有用,但是非必 ...
- 记账类APP竞品分析-挖财与随手记
注:本文更新中. 一.概览 1. 产品名称及版本 l 挖财11.2.0.0 免费版(2016/9/6发布) l 随手记10.2.8免费版(2016/8/22发布) 2. 设备信息 设备型号:i ...
- ajax请求cookie有效性问题验证
与人讨论时遇到一个问题,就是: 浏览器中后台发起的一个异步ajax请求,服务器做响应时,附带了cookie信息,那么后续对同域名下其他页面请求时,该cookie是否有效,会一并随请求提交到web服务器 ...
- PL_SQL导入数据库数据
首先用pl/sql将数据批量导出或者全部导出具体操作如下 点击工具 ----->导出数据---->SQL插入 导出的数据格式如下: prompt PL/SQL Developer im ...