映射一对一关联

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. 只需一点小修改,HTC Vive画面会更清晰锐利

    这里要先谢谢@NB81rkd0qB,他的那个帖子里其实很多碰到的问题都可以解决,但是目前有点乱,所以我这里斗胆整理一下,希望能帮助一下朋友们.第一步:我们要找到[steamvr.vrsettings] ...

  2. Intel Code Challenge Final Round (Div. 1 + Div. 2, Combined) C. Ray Tracing

    我不告诉你这个链接是什么 分析:模拟可以过,但是好烦啊..不会写.还有一个扩展欧几里得的方法,见下: 假设光线没有反射,而是对应的感应器镜面对称了一下的话 左下角红色的地方是原始的的方格,剩下的三个格 ...

  3. 使用dreamweaver去掉文本中的空格和换行

    当我们从其他地方拷贝文本到网页,在html代码中会自动带有空格和换行,手动去掉很麻烦,今天试着用dreamweaver去了一下,方法如下: 1.点击Ctrl+F,打开“查找和替换”窗口 2‘见下图:

  4. C++ 消息中间件(MQ4CPP)

    MQ4CPP支持: MultiThreading Sockets Cluster Encription Compression Service lookup Message routing 看到MQ4 ...

  5. 【原创】MVC4+Jquery+EasyUI实现的工作流平台

    最近把工作流从传统的WebFrom上迁移到我的MVC4安全权限基础框架中,感觉非常不错MVC4在各方面给用户的体验确实跟以前传统的WEB是质的提升.由于后面要做基于工作流技术的ERP,所以需要先把工作 ...

  6. AntiXSS v4.0中Sanitizer.GetSafeHtmlFragment等方法将部分汉字编码为乱码的解决方案

    AntiXSS v4.0中Sanitizer.GetSafeHtmlFragment等方法将部分汉字编码为乱码的解决方案 以下代码为asp.net环境下,c#语言编写的解决方案.数据用Dictiona ...

  7. MySQL中如何查看“慢查询”,如何分析执行SQL的效率?

    一.MySQL数据库有几个配置选项可以帮助我们及时捕获低效SQL语句 1,slow_query_log这个参数设置为ON,可以捕获执行时间超过一定数值的SQL语句. 2,long_query_time ...

  8. Scala 的确棒

    我的确认为计算机学院应该开一门 Scala 的语言课程. 在这篇文章中,我会讲述为什么我会有这样的想法,在此之前,有几点我想要先声明一下: 本文无意对编程语言进行评比,我要讲述的主体是为什么你应该学习 ...

  9. 需要不断学习的编程知识库list

    1.重构思想: 2.回调思想: 3.封装思想: 4.模块化思想: 5.复用思想: 6.C++的面向对象思想:  -----后续

  10. 揭秘JavaScript中谜一样的this

      揭秘JavaScript中谜一样的this 在这篇文章里我想阐明JavaScript中的this,希望对你理解this的工作机制有一些帮助.作为JavaScript程序员学习this对于你的发展有 ...