Hibernate一对一关联映射配置
一、一对一关联
Hibernate提供了两种映射一对一关联关系的方式:按照外键映射和按照主键映射。下面以员工账号和员工档案表为例,介绍这两种映射方式,并使用这两种映射方式分别完成以下持久化操作:
(1)保存员工档案的同时分配给员工一个账号。
(2)加载员工档案的同时加载账号信息。
按照外键映射:
关系图:

①创建实体类:Resume、Users 并封装属性

public class Resume {
//档案id
private Integer resid;
//档案名称
private String resname;
//档案编号
private String rescardno;
//员工对象
private Users users;
}


public class Users {
//员工id
private Integer userid;
//员工姓名
private String username;
//员工密码
private String userpass;
//档案对象
private Resume resume;
}

② 配置小配置 Users.hbm.xml
注:property-ref="users" 表明Resume的users属性建立了从Users对象到Resume对象的关联

<?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 package="cn.happy.entity">
<class name="Users" table="USERS1">
<id name="userid" column="USERID" >
<generator class="native"></generator>
</id>
<property name="username" column="USERNAME" type="string"></property>
<property name="userpass" column="USERPASS" type="string"></property>
<!-- 配置一对一外键关系的关联 -->
<one-to-one name="resume" class="Resume" property-ref="users"></one-to-one>
</class>
</hibernate-mapping>

Resume.hbm.xml
注:因为Resume为外键表 植入<many-to-one>元素 并设置属性unique=“true” 确保用户档案的列只能是唯一的, 一个档案对应一个用户编号

<?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 package="cn.happy.entity">
<class name="Resume" table="RESUME1">
<id column="RESID" name="resid">
<generator class="native"></generator>
</id>
<property column="RESNAME" name="resname" type="string"/>
<property column="RESCARDNO" name="rescardno" type="string"/>
<!--主的一方 --> <!-- 在用户档案指定的列只能是唯一的 一个档案只能对应一个用户编号-->
<many-to-one name="users" cascade="all" class="Users" column="RESCARDID" unique="true"/>
</class>
</hibernate-mapping>

③ 大配置进行关联小配置
<!-- 关联小配置 --> <mapping resource="cn/happy/entity/Users.hbm.xml" />
<mapping resource="cn/happy/entity/Resume.hbm.xml" />
测试类:

/*
* 添加
*/ @Test
public void addTest(){
//创建用户对象
Users u=new Users();
u.setUsername("张三1");
u.setUserpass("003");
//创建档案对象
Resume r=new Resume();
r.setResname("大学文凭1");
r.setRescardno("003");
//关联
u.setResume(r);
r.setUsers(u);
//保存档案,员工自动save
session.save(r);
System.out.println("save ok!!!"); }

输出结果:

按照主键映射:
关系图如下:

实体类同上
其次就是小配置的更改。Resume为主键表,Users的Userid既是主键又是外键 因此植入元素generator的类型为foreign主键
<one-to-one>植入属性constrained 用来约束 在底层数据表中植入外键
Users.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 package="cn.happy.pk">
<class name="Users2" table="USERS2">
<id name="userid" column="USERID" >
<generator class="foreign">
<param name="property">resume2</param>
</generator>
</id>
<property name="username" column="USERNAME" type="string"></property>
<property name="userpass" column="USERPASS" type="string"></property>
<!-- constrained:用来约束 在底层USERS2数据表中,植入外键-->
<one-to-one name="resume2" class="Resume2" constrained="true"></one-to-one>
</class>
</hibernate-mapping>

Resume.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 package="cn.happy.pk">
<class name="Resume2" table="RESUME2">
<id column="RESID" name="resid">
<generator class="sequence">
<param name="sequence">SEQ_NUM</param>
</generator>
</id>
<property column="RESNAME" name="resname" type="string"/>
<property column="RESCARDNO" name="rescardno" type="string"/>
<!--主的一方 -->
<one-to-one name="users2" cascade="all" class="Users2" />
</class>
</hibernate-mapping>

输出结果如下:

Hibernate一对一关联映射配置的更多相关文章
- 【学习笔记】Hibernate 一对一关联映射 组件映射 二级缓存 集合缓存
啊讲道理放假这十天不到啊 感觉生活中充满了绝望 这就又开学了 好吧好吧继续学习笔记?还是什么的 一对一关联映射 这次我们仍然准备了两个表 一个是用户表Users 一个是档案表Resume 他们的关系是 ...
- Hibernate 一对一关联映射,mappedBy参数解析
在最近java,SSH框架的学习中遇到了这样的一个问题,在Hibernate的开发中一对一关联映射的单向关联,主表会在次表新增一列次表的主键如下图,但是在双向关联中次表不会在表中创建主表的主键一列,这 ...
- Hibernate 一对一关联映射
package com.entity; import javax.persistence.Entity; import javax.persistence.OneToOne; @Entity publ ...
- 【Hibernate框架】关联映射(一对一关联映射)
一.整理思路: 之前,小编总结过Mybatis的关联映射,接下来,再来总结一下hibernate的相关的关联映射,直接上图: 这张图,就是小编整理总结整个Hibernate的关联映射的一个大致思路. ...
- Hibernate学习笔记(四)关系映射之一对一关联映射
一. 一对一关联映射 ² 两个对象之间是一对一的关系,如Person-IdCard(人—身份证号) ² 有两种策略可以实现一对一的关联映射 Ø 主键关联:即让 ...
- Hibernate 性能优化一对一关联映射
概述: hibernate提供了两种映射一对一关联的方式:按照外键映射和按照主键映射. 下面以员工账号和员工档案为例 ,介绍两种映射方式,并使用这两种映射方式分别完成以下持久化操作: (1)保存员工档 ...
- Hibernate之一对一关联映射
Hibernate中一对一关联映射共分为两种,一种是一对一主键关联映射,另一种是一对一唯一外键关联映射.下面简单介绍一下这两种关联映射. 一对一主键关联映射 一对一主键关联映射的两个实体有相同的ID. ...
- java之hibernate之基于主键的双向一对一关联映射
这篇 基于主键的双向一对一关联映射 1.依然考察人和身份证的一对一关系,如果采用主键关联,那么其表结构为: 2.类结构 Person.java public class Person implemen ...
- java之hibernate之基于主键的单向一对一关联映射
这篇讲 基于主键的单向一对一关联映射 1.依然考察人和身份证的一对一关系,如果采用主键关联,那么其表结构应该为: 2.类结构 Person.java public class Person imple ...
随机推荐
- JavaScript一些基础技巧和注意事项,你了解这些吗?
总结了一些JavaScript在开发编码中的使用技巧,如有不对,欢迎指正. 一.JavaScript在HTML和XHTML的使用 使用<script>元素有两种方式:直接在页面中嵌入Jav ...
- ABAP 加密解密程序
用于对字符串的加密和解密: DATA: o_encryptor TYPE REF TO cl_hard_wired_encryptor, o_cx_encrypt_error TYPE REF TO ...
- GitHub学习心得之 安装配置与多帐号管理
作者:枫雪庭 出处:http://www.cnblogs.com/FengXueTing-px/ 欢迎转载 GitHub学习心得之 安装配置与多帐号管理 1.前言2.GitHub Linux安装(ub ...
- yii create url (二)
在Yii中经常要生成URL,不管是为了自动跳转还是仅仅是一个链接.下面对Yii中的URL生成做了一个总结.提示:以下controllerX代表控制器X,actionX代表方法X.在Controller ...
- Phonegap 之 iOS银联在线支付(js调用ios端银联支付控件)
Phonegap项目,做支付的时候,当把网站打包到ios或android端成app后,在app上通过wap调用银联在线存在一个问题: 就是当从银联支付成功后,再从服务器返回到app客户端就很难实现. ...
- iPhone 信号格转变数字
?在拨号键输入*3001#12345#* ?按呼叫键,就会进入Field Test页面 ?你就会看到信号格变为了数字,然而只要按home键返回就又会变为信号格 ?如果想一直变为数字的话,在Field ...
- 终极指南:如何为iOS8应用制作预览视频
最近一两个月里,苹果的世界里出现了很多新东西,比如屏幕更大的iPhone 6,可穿戴设备Apple Watch,iOS8,以及旨在帮助用户更好的发现应用的App Store改版等等. 说到App St ...
- windows 常用命令
1 Services.msc 在运行输入 启动所有安装程序配置
- WPF学习之路(四)路由
路由事件概述 功能定义:路由事件是一种可以针对元素树中的多个侦听器(而不是仅针对引发该事件的对象)调用处理程序的事件. 实现定义:路由事件是一个 CLR 事件,可以由RouteEvent 类的实例提供 ...
- 关于input全选反选恶心的异常情况
上一篇讲到:第一次点击全选按钮input显示对勾,第二次则不显示,需要用prop来添加checked属性. 但是用prop会出现一个问题,对勾显示,而checked属性不会被添加(比如:$(" ...