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之一对一外键关联(五)的更多相关文章

  1. Hibernate5.2之一对一主键关联(四)

                                                      Hibernate5.2之一对一主键关联(四) 一.简介 一对一关联关系分为两种:a.主键关联:b. ...

  2. Hibernate,关系映射的多对一单向关联、多对一双向关联、一对一主键关联、一对一外键关联、多对多关系关联

    2018-11-10  22:27:02开始写 下图内容ORM.Hibernate介绍.hibername.cfg.xml结构: 下图内容hibernate映射文件结构介绍 下图内容hibernate ...

  3. Java基础-SSM之mybatis一对一外键关联

    Java基础-SSM之mybatis一对一外键关联 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.准备测试环境(创建数据库表)  1>.创建husbandsfk和wife ...

  4. hibernate5(12)注解映射[4]一对一外键关联

    在实际博客站点中,文章内容的数据量非常多,它会影响我们检索文章其他数据的时间,如查询公布时间.标题.类别的等. 这个时候,我们能够尝试将文章内容存在还有一张表中,然后建立起文章--文章内容的一对一映射 ...

  5. Hibrenate关系映射(一对一外键关联)

    一.一对一(单向):使用外部索引将其中的一个类作为parent,相对应的一个就是子类,并且参照父 类的主键ID来生成数据库表.(比如:可以将husband中设置一个wife_id对应wife中的主键i ...

  6. hibernate一对一外键双向关联

    关联是类(类的实例)之间的关系,表示有意义和值得关注的连接. 本系列将介绍Hibernate中主要的几种关联映射 Hibernate一对一主键单向关联Hibernate一对一主键双向关联Hiberna ...

  7. hibernate一对一外键单向关联

    关联是类(类的实例)之间的关系,表示有意义和值得关注的连接. 本系列将介绍Hibernate中主要的几种关联映射 Hibernate一对一主键单向关联Hibernate一对一主键双向关联Hiberna ...

  8. Entity Framework - 理清关系 - 基于外键关联的单向一对一关系

      注:本文针对的是 Entity Framework Code First 场景. 之前写过三篇文章试图理清Entity Framework中的一对一关系(单相思(单向一对一), 两情相悦(双向一对 ...

  9. hibernate一对一双向外键关联

    一对一双向外键关联:双方都持有对方的外键关联关系. 主控方和一对一单向外键关联的情况是一样的,主要的差异表现为,被空方需要添加: @OneToOne(mappedBy="card" ...

随机推荐

  1. Spring的Bean的基本概念

    Spring其实就是一个大型的工厂,而Spring容器中的Bean就是该工厂的产品.Spring容器能够生产哪些产品,取决于配置文件的配置. 对于我们而言,使用Spring框架做两件事:开发Bean. ...

  2. software_testing_work3_question1

    package com.Phantom; import java.io.IOException; import java.util.Scanner; public class Work3_1 { /* ...

  3. 关于peersim样例配置文件的超详细解读(新手勿喷)

    相信很多兄弟一开始接触peersim,对配置文件还是有点不适应,我看了好久的样例的配置文件,一层层去找对应的文件的方法,终于好像悟懂了一点,记下来以后回顾. 贴上代码,一点点分析. 首先要说下所谓的配 ...

  4. Magento显示多货币,Magento 多货币设置

    System - Configuration - Currency Setup 在右边Currency Options里的Allowed currencies勾选, 然后 System - Manag ...

  5. STM32启动代码分析 IAR 比较好

    stm32启动代码分析 (2012-06-12 09:43:31) 转载▼     最近开始使用ST的stm32w108芯片(也是一款zigbee芯片).开始看他的启动代码看的晕晕呼呼呼的. 还好在c ...

  6. D - 图论

    Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status Descr ...

  7. 快速上手RaphaelJS-Instant RaphaelJS Starter翻译(一)

       (目前发现一些文章被盗用的情况,我们将在每篇文章前面添加原文地址,本文源地址:http://www.cnblogs.com/idealer3d/p/Instant_RaphaelJS_Start ...

  8. android 手机屏幕有关的几个工具(屏幕宽高,dp和px互相转换)

    平时适配页面时经常会需要根据屏幕的宽高来设置控件的大小,很多时候在代码中还会需要dp和px互相转换. 今天把最常用的几个记录一下,经测试包括2.3 ~ 5.0之间的版本都可用,其他版本未测,不过应该也 ...

  9. SqlServer 行转列(统计某年一到十二个月数据总和)

    select * from(    select sum(case MONTH(purchase_date) when '1' then SumMoney else 0 end) as January ...

  10. 毛毛虫学习日记_SQL

    五毛叶的SQL学习: 1.SELECT:(A 表名,a 字段) SELECT A.b, C.c , D.d(a,b,c,d,e...各种自己需要的字段) FROM  A(中心表名) LEFT /INN ...