数据库模型

  一般对一对一的关系而言,会存在一个主从关系。如 人 与 身份证,就是一个一对一关系, 人 是主,身份证 是从

Person

  PK:id

    name

    age

Id_Card

  PK、FK:id

    useful_life

一般在设计的时候,对于主表的id,由自增长或序列产生,从表的主键id可以直接使用主表的主键id,不需要自己重新生成


Domain

 package org.zln.hibernate.domain;

 /**
* Created by coolkid on 2015/6/20 0020.
*/
public class Person {
private int id;
private String name;
private IdCard idCard;
... }
 package org.zln.hibernate.domain;

 /**
* Created by coolkid on 2015/6/20 0020.
*/
public class IdCard {
private int id;
private String usefulLife;//证件有效期
private Person person;
...
}

XML

Person.hbm.xml

 <?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="org.zln.hibernate.domain"> <class name="Person" table="person">
<id name="id" column="id">
<generator class="native"/>
</id>
<property name="name" column="name"/>
<!--一对一关系映射-->
<one-to-one name="idCard" />
</class> </hibernate-mapping>

IdCard.hbm.xml

 <?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="org.zln.hibernate.domain"> <class name="IdCard" table="id_card">
<id name="id" column="id">
<!--主键依赖类中的属性-->
<generator class="foreign">
<!--外键从person属性中引用过来 从person 的 getId 方法获取-->
<param name="property">person</param>
</generator>
</id>
<property name="usefulList" column="useful_life"/>
<!--一对一关系映射-->
<one-to-one name="person" />
</class> </hibernate-mapping>

Dao

 package org.zln.hibernate.dao;

 import org.hibernate.Session;
import org.hibernate.Transaction;
import org.zln.hibernate.domain.IdCard;
import org.zln.hibernate.domain.Person;
import org.zln.hibernate.utils.HibernateUtils; /**
* Created by coolkid on 2015/6/20 0020.
*/
public class PersonDao { /**
* 保存Person及其IdCard
* @param person 人
* @param idCard 身份证
*/
public void savePerson(Person person,IdCard idCard){
Session session = null;
Transaction transaction = null;
try {
session = HibernateUtils.getSession();
transaction = session.beginTransaction(); person.setIdCard(idCard);
idCard.setPerson(person); session.save(person);
session.save(idCard); transaction.commit();
}finally {
if (session != null){
session.close();
}
}
} /**
* 通过id查询person
* @param person person
* @return Person
*/
public Person getPerson(Person person){
Session session = null;
Person person1 = null;
try {
session = HibernateUtils.getSession();
person1 = (Person) session.get(Person.class,person.getId());
}finally {
if (session != null){
session.close();
}
}
return person1;
}
}

另一种一对一关系的实现,就是使用多对一的方法,但是对“多”加唯一性约束

在配置IdCard的name属性时,使用<many-to-one>标签,对应的column是person_id,设置unique="true",这样也实现了一对一关系映射

 <?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="org.zln.hibernate.domain"> <class name="IdCard" table="id_card">
<id name="id" column="id">
<generator class="native"/>
</id>
<property name="usefulList" column="useful_life"/>
<many-to-one name="person" column="person_id" unique="true" not-null="true"/>
</class> </hibernate-mapping>

Hibernate关联映射之_一对一的更多相关文章

  1. Hibernate关联映射之_多对一

    多对一 Employee-Department 对于 员工 和 部门 两个对象,从员工的角度来看,就是多对一的一个关系--->多个员工对应一个部门 表设计: 部门表:department,id主 ...

  2. Hibernate关联映射之_一对多

    domain: package org.zln.hibernate.domain; import java.util.Set; /** * 部门Domain对象 * Created by sherry ...

  3. Java三大框架之——Hibernate关联映射与级联操作

    什么是Hibernate中的关联映射? 简单来说Hibernate是ORM映射的持久层框架,全称是(Object Relational Mapping),即对象关系映射. 它将数据库中的表映射成对应的 ...

  4. (转)Hibernate关联映射——对象的三种关系

    http://blog.csdn.net/yerenyuan_pku/article/details/70148618 Hibernate关联映射——对象的三种关系 Hibernate框架基于ORM设 ...

  5. Hibernate关联映射(一对多/多对多)

    版权声明:翀版 https://blog.csdn.net/biggerchong/article/details/843401053.  Hibernate关联映射上接Hibernate持久化类:h ...

  6. Hibernate关联映射关系

    Hibernate关联映射关系 一.双向一对多关联映射关系:当类与类之间建立了关联,就可以方便的从一个对象导航到另一个或另一组与它关联的对象(一对多双向关联和多对一双向关联是完全一样的) 1.1创建实 ...

  7. Oracle primary,unique,foreign 区别,Hibernate 关联映射

    Oracle primary,unique,foreign 区别 转:http://www.cnblogs.com/henw/archive/2012/08/15/2639510.html NOT N ...

  8. 第六章 Hibernate关联映射

    第六章 hibernate关联映射一.本章知识点分为2部分:1.关联关系:单向多对一关联关系,双向一对多关联关系(含一对多关联关系),多对多关联关系2.延迟加载:类级别加载策略,一对多加载策略,多对一 ...

  9. 【学习笔记】Hibernate关联映射(Y2-1-6)

    Hibernate关联映射 关联映射就是将关联关系映射到数据库里,在对象模型中就是一个或多个引用. 1.单向多对一关联 准备数据库 部门表和员工表 其中部门表有两列 部门编号和名称 员工表有三列 员工 ...

随机推荐

  1. zabbix service安装配置

    1.安装时间同步 yum -y install ntpdate systemctl start ntpdate.service systemctl enable ntpdate.service 2.安 ...

  2. 'sessionFactory' or 'hibernateTemplate' is required

    网上都是说在dao中未注入  sessionFactory,然而我有 于是排除 @Autowired public FlightDaoImpl(@Qualifier(value = "ses ...

  3. ubuntu多版本php切换

    最近想要学习一下swoole,虽然机子上装的是php7.0,但是考虑到一些有关swoole的轮子要依赖更高版本(例如swooletw),所以就在机子上升级了php7.2,下面是在网上搜索或者自己折腾出 ...

  4. node.js常用的fs文件系统

    fs文件系统模块对于系统文件及目录进行一些读写操作. 模块中的方法均有异步和同步版本,例如读取文件内容的函数有异步的 fs.readFile() 和同步的 fs.readFileSync(). 异步的 ...

  5. PHP接收http请求头信息

    1.PHP 自带函数 getallheaders() 目前 getallheaders() 只能用于 apache 中.如果想在 nginx 中也能使用,可以使用自定义函数. foreach (get ...

  6. ThinkPHP创建应用

    新建一个文件 引入ThinkPHP文件

  7. SVM中的间隔最大化

    参考链接: 1.https://blog.csdn.net/TaiJi1985/article/details/75087742 2.李航<统计学习方法>7.1节 线性可分支持向量机与硬间 ...

  8. PHP中的面向对象魔术方法大全

    1.__construct  构造方法 2.__destruct  析构方法 3.__get 获取成员值 4.__set 设定成员值 5.__isset 判断成员值 6.__unset unset成员 ...

  9. C语言实例解析精粹学习笔记——34(用“结构”统计学生成绩)

    实例34: 设学生信息包括学号.姓名和五门功课的成绩,要求编写输入输出学生信息的函数.在输入学生信息后,以学生成绩的总分从高到低顺序输出学生信息. 思路: 程序引入一个结构数组依次存储输入的学生信息, ...

  10. C语言实例解析精粹学习笔记——33(扑克牌的结构表示)

    实例33: 使用“结构”定义一副扑克牌,并对变量赋值,输出结果 思路: 扑克牌有4种花色,用枚举类型表示花色,其他都是结构体的简单应用 程序代码: #include <stdio.h> # ...