映射一对一关联

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

最新文章

  1. [Computational Advertising] 计算广告学笔记之基础概念
  2. zstack 离线升级1.1到 1.2 rc
  3. 【Robot Framework】robot framework 学习以及selenium、appnium、requests实践(一)
  4. C#-DataTable分页代码
  5. PHP实用的功能函数
  6. LeetCode: Populating Next Right Pointer in Each Node
  7. Shell脚本文件操作
  8. mkfs.xfs命令没找到
  9. (转载)一句简单命令重启nginx - [nginx]
  10. psl/sql本地与远程连接配置
  11. SpringMVC源码
  12. ubuntu17.10 安装firefox的flash
  13. java常用的几种线程池比较
  14. 使用superlance插件增强supervisor的监控能力
  15. SpringBoot 数据篇之使用JDBC
  16. 字符串Hash || BZOJ 3555: [Ctsc2014]企鹅QQ || P4503 [CTSC2014]企鹅QQ
  17. HDLM for AIX安装
  18. Java编程练习题
  19. POJ 2689 筛法求素数
  20. js函数在frame中的相互的调用

热门文章

  1. Java中的方法应用
  2. json和jsonp(json是目的,jsonp是手段)
  3. 商业信息管理系统 Bizagi 建模pattern
  4. div模拟table,可实现左右高度同增长(html布局)
  5. windows安装postgres源代码
  6. 【自动化学习笔记】_环境搭建Selenium2+Eclipse+Java+TestNG_(一)
  7. MySql学习 (一) —— 基本数据库操作语句、三大列类型
  8. EF6 CodeFirst 实践系列文章列表
  9. bzoj 3172: [Tjoi2013]单词
  10. python网络编程【四】(域名系统)