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" ...
随机推荐
- DotNetBar中collapsibleSplitContainer的问题
如果有两个collapsibleSplitContainer,并且将splitwidth都设置为1,则只有第一个起作用,如,窗体设计中的图是: 而执行的图是: 解决办法:在窗体load里手动将第二个c ...
- linux命令:文件类型和扩展名
在linux系统中,一切皆是文件.Linux文件类型常见的有:普通文件.目录文件.字符设备文件和块设备文件.数据接口文件,符号链接文件,数据传送文件等. 1. 普通文件 用 ls -lh 来查看某个文 ...
- HDU 5386 暴力
题目 也是个坑题,可惜没有发现这是个水题,被矩阵的气势吓住了,其实后来做出来的人挺多,就应该想到没那么难了.(两个队友陷入DP无法自拔,没有想换题的打算). 题意:告诉初始矩阵,目的矩阵,告诉n个步骤 ...
- 【转】Xcode概览:调试应用程序
原文转自:http://www.cocoachina.com/ios/20141128/10358.html 本文由CocoaChina翻译组成员Creolophus(github主页)翻译自苹果官方 ...
- Android studio快捷键大全 和 eclipse对照(原)
Ctrl+空格 代码提示 (同Eclipse中Alt+/) Ctrl+Shjft+N 项目 ...
- ubuntu10.04.4下安装JDK
第一步:http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html下载安装包(本来是可以通过 ...
- LPTHW 笨办法学python 37章 python关键字/关键词介绍
本章简要的介绍了各种关键词: and:[布尔运算]且 del: 删除变量(函数,类) from: 从某一个库或者文件读取 not:[布尔运算]非 while: while-loop 关键字,后跟循环条 ...
- maven - Eclipse构建maven项目
前面的博文已经介绍了如何安装maven,本文将记录如何在Eclipse下构建maven项目. 一.Eclipse maven插件安装 关于安装Eclipse maven插件,网上有很多方法,这里推荐一 ...
- 参数*args和**args区别
#*args(元组)和**args(字典)的区别 def tuple_test(*args): for i in args: print 'hello'+i s=('xuexi','mili') tu ...
- 关于 Record & TList 的一点吐槽
需求是把record 保存在TList中,并可以随时改变TList中Items的各项值. 代码很简单: MyRec = record MyStr: string; constructor Create ...