java之hibernate之基于外键的双向一对一关联映射
这篇讲解 基于外键的双向一对一关联映射
1.考察如下信息,人和身份证之间是一个一对一的关系。表的设计

2.类结构
Person.java
public class Person implements Serializable{
private int id;
private String name;
private IdCard idCard;
public Person() {
}
public Person(String name) {
super();
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public IdCard getIdCard() {
return idCard;
}
public void setIdCard(IdCard idCard) {
this.idCard = idCard;
}
}
IdCard.java
public class IdCard implements Serializable{
private String id;
private String address;
private Person person;
public IdCard() {
// TODO Auto-generated constructor stub
}
public IdCard(String id, String address) {
super();
this.id = id;
this.address = address;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public Person getPerson() {
return person;
}
public void setPerson(Person person) {
this.person = person;
}
}
3.映射文件
Person.hbm.xml
<hibernate-mapping package="cn.sxt.pojo">
<class name="Person" table="t_person">
<id name="id">
<generator class="native"></generator>
</id>
<property name="name"/>
<!-- 基于外键的一对一和多对一的表结构是一样的,所以映射文件也一样,要保证外键是唯一的 -->
<many-to-one name="idCard" column="idCardId" unique="true"></many-to-one>
</class>
</hibernate-mapping>
IdCard.hbm.xml
<hibernate-mapping package="cn.sxt.pojo">
<class name="IdCard" table="t_idCard">
<id name="id">
<generator class="assigned"></generator>
</id>
<property name="address"/>
<!-- 一对一的双向关联 person表示IdCard类中属性
property-ref引用的是 person类中IdCard的属性名
-->
<one-to-one name="person" property-ref="idCard"></one-to-one>
</class>
</hibernate-mapping>
4.测试
public class HibernateTest {
/**
* 生成数据库表的工具方法
* */
@Test
public void testCreateDB(){
Configuration cfg = new Configuration().configure();
SchemaExport se = new SchemaExport(cfg);
//第一个参数 是否打印sql脚本
//第二个参数 是否将脚本导出到数据库中执行
se.create(true, true);
}
/**
* 初始化表数据
*/
@Test
public void testInit(){
Session session = null;
Transaction tx = null;
try {
session = HibernateUtil.getSession();
tx = session.beginTransaction();
IdCard card1 = new IdCard("110086", "湖北武当");
IdCard card2 = new IdCard("110087", "光明顶");
Person p1 = new Person("张三疯");
p1.setIdCard(card1);
Person p2 = new Person("殷素素");
p2.setIdCard(card2);
session.save(card1);
session.save(card2);
session.save(p1);
session.save(p2);
tx.commit();
} catch (Exception e) {
if(tx!=null)
tx.rollback();
}finally {
HibernateUtil.close();
}
}
/**
*/
@Test
public void testGetData(){
Session session = HibernateUtil.getSession();
Person p1 = (Person)session.get(Person.class, 1);
System.out.println(p1.getName()+"----"+p1.getIdCard().getId()+"----"+p1.getIdCard().getAddress());
System.out.println("-------------------------------------------");
IdCard card = (IdCard)session.get(IdCard.class, "110086");
System.out.println(card.getId()+"------"+card.getAddress()+"----"+card.getPerson().getName());
HibernateUtil.close();
}
}
java之hibernate之基于外键的双向一对一关联映射的更多相关文章
- java之hibernate之基于主键的双向一对一关联映射
这篇 基于主键的双向一对一关联映射 1.依然考察人和身份证的一对一关系,如果采用主键关联,那么其表结构为: 2.类结构 Person.java public class Person implemen ...
- java之hibernate之基于主键的单向一对一关联映射
这篇讲 基于主键的单向一对一关联映射 1.依然考察人和身份证的一对一关系,如果采用主键关联,那么其表结构应该为: 2.类结构 Person.java public class Person imple ...
- Hibernate 基于外键的双向一对一关联映射
之前简单介绍了基于外键的单项一对一的关联映射关系,本文简单介绍基于外键的双向一对一的关联映射. 1.设计表结构 表结构对于双向一对一来说没有多少改变,只是双向都可以获取到对方. 2.创建Person对 ...
- Hibernate 基于外键的单项一对一关联映射
在开发过程中很多时候会用到表与表之间一对一的关联关系,本文简单介绍在Hibernate4中单项一对一的关联映射. 1.设计表结构 2.创建Person对象 3.创建IdCard对象 4.写hbm.xm ...
- Hibernate关系映射(二) 基于外键的双向一对一
基于外键的双向一对一关联映射 需要在一端添加<one-to-one>标签,用property-ref来指定反向属性引用. 还是通过刚才用户和地址来演示双向一对一关联. 代码演示 一.实体类 ...
- Hibernate学习(二补充)关系映射----基于外键的双向一对一
刚刚写的是基于外键的单向一对一. 那么双向一对一就是在单向一对一的基础上稍微改动就可以了. account.java和account.hbm.xml都不用变动 只要我们小小的变动address.j ...
- java之hibernate之基于外键的一对一单向关联映射
这篇讲解基于外键的一对一单向关联映射 1.考察如下信息,人和身份证之间是一个一对一的关系.表的设计 注意:基于外键的一对一关联的表结构和多对一的表结构是一致的,但是,外键是唯一的. 2.类的结构 Pe ...
- hibernate 基于主键的单向一对一关联映射
1.设计表结构 表结构对于基于外键的关联关系来说就少了外键的关联列,并且两张表共用同一个ID,表示一对一. 2.创建Person对象 3.创建IdCard对象 4.写hbm.xml文件 5.生成数据库 ...
- hibernate笔记--基于外键的单(双)向的一对一映射关系
假设我们有两张表,人员信息表Person,和身份信息表IdCard,我们知道每个人只有一个身份证号,所以这里的Person和IdCard表是一一对应的,也就是一对一的映射关系,基于外键的单向一对一映射 ...
随机推荐
- 使用JS计算前一天和后一天
使用JS实现前一天和后一天 首先,我们先在html中写两个按钮来进行简单操作 <button onclick="Before()">前一天</button> ...
- 【Codeforces】CF367D Sereja and Sets (数学)
题目大意 1到n这n个正整数被分成了m个不相交的集合(集合不一定连续),现在从这m个集合中选出最少个数的集合,满足对于[1,n]中任意一个长度为d的区间都至少有一个数字出现在已选集合中.(1 < ...
- 2019软工实践_Alpha(4/6)
队名:955 组长博客:https://www.cnblogs.com/cclong/p/11882079.html 作业博客:https://edu.cnblogs.com/campus/fzu/S ...
- ThinkPHP5 基础知识入门 [入门必先了解]
一.目录结构 下载最新版框架后,解压缩到web目录下面,可以看到初始的目录结构如下: project 应用部署目录 ├─application 应用目录(可设置) │ ├─common 公共模块目录( ...
- ASP.NET中httpmodules与httphandlers全解析
https://www.cnblogs.com/zpc870921/archive/2012/03/12/2391424.html https://www.cnblogs.com/PiaoMiaoGo ...
- Red Hat Enterprise Linux ISO 全镜像下载
1.iso网盘下载地址:https://wanghualang.pipipan.com/dir/13133650-26232498-a8efb3/ 2.中国大陆开源镜像站汇总,企业贡献: 搜狐开源镜像 ...
- Base64(3)
public final class Base64 { static private final int BASELENGTH = 128; static private ...
- Puppeteer最大化显示,分辨率自适应
Puppeteer自适应分辨率,可以将defaultViewport设为null, 启动的时候还是半屏显示,点击最大化按钮,可以最大化显示. 这样分辨率能够自适应操作系统. 具体可看:https:// ...
- 一码学程 10284 排队找bug 题解 单调队列 或者 线段树RMQ
注:只是看到题目,未评测,所以不确定代码正确性,但是算法思路没有问题 描述 同学们的bug还真是多啊,orz... 春节期间大家存下的bug都来找肖老师解决了. 每个人都有bug,但是肖老师却只有一个 ...
- [LeetCode] 324. Wiggle Sort II 摆动排序 II
Given an unsorted array nums, reorder it such that nums[0] < nums[1] > nums[2] < nums[3]... ...