映射一对一关联

Hibernate提供了两种映射一对一关联关系的方式,分别是按照外键映射和按照主键映射。

下面是员工表和档案信息表(员工和档案表之间的关系是一对一的关系)

   档案表(dept)

 public class Dept {
private Integer deptid;
private String mystreet;
private Emp emp; public Dept() {
} public Dept(Integer deptid, String mystreet, Emp emp) {
this.deptid = deptid;
this.mystreet = mystreet;
this.emp = emp;
}
public Integer getDeptid() {
return deptid;
}
public void setDeptid(Integer deptid) {
this.deptid = deptid;
}
public String getMystreet() {
return mystreet;
}
public void setMystreet(String mystreet) {
this.mystreet = mystreet;
}
public Emp getEmp() {
return emp;
}
public void setEmp(Emp emp) {
this.emp = emp;
} }

员工表(emp)

 public class Emp {
private Integer empid;
private String myname;
private Dept dept; public Emp() {
} public Emp(Integer empid, String myname, Dept dept) {
this.empid = empid;
this.myname = myname;
this.dept = dept;
}
public Integer getEmpid() {
return empid;
}
public void setEmpid(Integer empid) {
this.empid = empid;
}
public String getMyname() {
return myname;
}
public void setMyname(String myname) {
this.myname = myname;
}
public Dept getDept() {
return dept;
}
public void setDept(Dept dept) {
this.dept = dept;
}
}

下面是第一种方案是按照主键映射

Emp的配置文件

 <?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.rm.onetoone_pk">
<class name="Emp" table="EMP2016">
<id name="empid" column="EMPID" type="int">
<generator class="sequence">
<param name="sequence">sq_id</param>
</generator>
</id>
<property name="myname" column="MYNAME" type="string"></property>
<one-to-one name="dept" class="Dept" property-ref="emp"></one-to-one>
<!-- property-ref为emp表明了Dept的emp属性建立了从Emp对象到Dept对象的关联 -->
</class> </hibernate-mapping>

Dept的配置文件

 <?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.rm.onetoone_pk">
<class name="Dept" table="DEPT2016">
<id name="deptid" column="DEPTID" type="int">
<generator class="sequence">
<param name="sequence">hb_ids</param>
</generator>
</id>
<property name="mystreet" column="MYSTREET" type="string"></property>
<many-to-one name="emp" class="Emp" cascade="all" unique="true" column="RESUSERID"></many-to-one>
<!-- cascade属性为all表示对本表的增 删 改 相关联的表都会自动更新 unique, 属性为true 表示唯一约束 column="RESUSERID" dept表的公共列-->
</class>
</hibernate-mapping>

这种方案的特点是:会在Dept表中增加一列 column="RESUSERID"这里就是与Emp相关联的列

第二种方案是按照外键映射

Emp的配置文件

 <?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.rm.onetoone_fk">
<class name="Emp" table="EMP2016fk">
<id name="empid" column="EMPID" type="int">
<generator class="foreign">
<param name="property">dept</param>
</generator>
</id>
<property name="myname" column="MYNAME" type="string"></property>
<one-to-one name="dept" class="Dept" constrained="true"></one-to-one>
<!-- constrained="true" 表示Emp表中的主键同时作为外键参照Emp表中的主键 -->
</class>
</hibernate-mapping>

Dept的配置文件

 <?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.rm.onetoone_fk">
<class name="Dept" table="DEPT2016fk">
<id name="deptid" column="DEPTID" type="int">
<generator class="sequence">
<param name="sequence">hb_ids</param>
</generator>
</id>
<property name="mystreet" column="MYSTREET" type="string"></property>
<one-to-one name="emp" class="Emp" cascade="all" ></one-to-one>
</class>
</hibernate-mapping>

这种方案的特点是员工表的主键和Dept表中的主键是相同的也就是Emp表和Dept表共享同一个OID

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

  1. Hibernate 映射一对一关联关系

    基于外键的方式: 附上代码: public class Manager { private Integer mgrId; private String mgrName; private Departm ...

  2. 【SSH系列】hibernate映射 -- 一对一双向关联映射

    开篇前言 上篇博文[SSH进阶之路]hibernate映射--一对一单向关联映射,小编介绍了一对一的单向关联映射,单向是指只能从人(Person)这端加载身份证端(IdCard),但是反过来,不能从身 ...

  3. 【SSH进阶之路】Hibernate映射——一对一双向关联映射(六)

    上篇博文[SSH进阶之路]Hibernate映射--一对一单向关联映射(五),我们介绍了一对一的单向关联映射,单向是指仅仅能从人(Person)这端载入身份证端(IdCard),可是反过来.不能从身份 ...

  4. hibernate映射的 关联关系:有 一对多关联关系,一对一关联关系,多对多关联关系,继承关系

    hibernate环境配置:导包.... 单向n-1:单向 n-1 关联只需从 n 的一端可以访问 1 的一端 <many-to-one> 元素来映射组成关系: name: 设定待映射的持 ...

  5. (Hibernate进阶)Hibernate映射——一对一单向关联映射(五)

    映射原理 两个实体对象之间是一对一的关联映射,即一个对象只能与另外唯一的一个对象相对应.例如:一个人(Person)只有一张身份证(IdCard).我们看一下这个例子的对象模型,如下图所示: 对象模型 ...

  6. 【SSH系列】Hibernate映射 -- 一对一单向关联映射

     映射原理       一对一关联映射:两个实体对象之间是一对一的关联映射,即一个对象只能与另外唯一的一个对象相对应.有两种策略可以实现一对一的关联映射:       a.主键关联:即让两个对象具有相 ...

  7. 【SSH进阶之路】Hibernate映射——一对一单向关联映射(五)

    [SSH进阶之路]Hibernate基本原理(一) ,小编介绍了Hibernate的基本原理以及它的核心,採用对象化的思维操作关系型数据库. [SSH进阶之路]Hibernate搭建开发环境+简单实例 ...

  8. (Hibernate进阶)Hibernate映射——一对一双向关联映射(六)

    上一篇博客我们介绍了一对一的单向关联映射,单向是指只能从人(Person)这端加载身份证端(IdCard),但是反过来,不能从身份证端加载人得信息.如图所示: 关键原因在于对象模型具有方向性: 单向: ...

  9. Hibernate —— 映射关联关系

    一.映射多对一关联关系. 1.单向的多对一 (1)以 Customer 和 Order 为例:一个用户可以发出多个订单,而一个订单只能属于一个客户.从 Order 到 Customer 是多对一关联关 ...

随机推荐

  1. 在linux上部署web环境

    1.升级python到2.7版本(通过源码包重新安装一个2.7版本的python):wget https://www.python.org/ftp/python/2.7.9/Python-2.7.9. ...

  2. MVC思想

    MVC英文即Model-View-Controller,即把一个应用的输入.处理.输出流程按照Model.View.Controller的方式进行分离,这样一个应用被分成三个层--模型层.视图层.控制 ...

  3. BIEE 10g 二次开发整理

    近半年在公司做某个项目的时候,主要使用到了Oracle BIEE 10g这套工具.刚开始的时候,对OBIEE是七窍通了六窍,还是一窍不通. 现在已经摸索出些许门道,特整理出来:一来,备忘:二来,供大家 ...

  4. Java EE : 一、图解Http协议

    目录 Java EE : 一.图解Http协议 Java EE : 二.图解 Cookie(小甜饼) Java EE : 三.图解Session(会话) 概述 一.技术基石及概述 二.深入理解技术基石 ...

  5. 关于KINECT2 和ROS接口安装的问题

    具体安装过程见此博客 http://www.itdadao.com/articles/c15a450477p0.html 感谢博主. 注意,在我自己的电脑上,最后测试的两条代码执行不了,即:1)ros ...

  6. @@identity的使用

    -- ============================================= -- Author: Qiuhua,Huang -- Create date: 08/09/2012 ...

  7. 在Oracle中使用Entity Framework 6 CodeFirst

    项目中需要将系统从SQLServer数据库迁移到Oracle上.由于原大部分数据访问操作都是通过包装了Entity Framework的统一访问入口实现的,所以需要研究Entity Framework ...

  8. 删除 https://tfs.visualstudio.com上的项目

    比如注册的tfs地址为https://zhaobl.visualstudio.com,要删除的项目是 bushub 那么需要使用VS2013以上的 C:\Program Files (x86)\Mic ...

  9. IOS常用框架

    IOS开发中有用的第三方库 #Objective-C中最受瞩目库 [链接](https://github.com/languages​​/Objective-C/most_watched) * [th ...

  10. 如何应用.NET中的消息队列服务

    建立一个队列是应用MSMQ的第一步.您可以通过Windows计算机管理控制台中的消息队列选项完成这一操作,或者自己编程建立一个队列.列表A中的C#代码建立了一个新的私有MSMQ消息队列(如果不存在队列 ...