举例:部门departments   -------部门经理managers

映射 有两种方式

  1:外键映射。类似于多对1.但是设置了unique唯一。

  

带外键的:

 package com.hibernate.o2o;

 public class Departments {
private Integer deptId;
private String deptName;
private Managers managers;
public Integer getDeptId() {
return deptId;
}
public void setDeptId(Integer deptId) {
this.deptId = deptId;
}
public String getDeptName() {
return deptName;
}
public void setDeptName(String deptName) {
this.deptName = deptName;
}
public Managers getManagers() {
return managers;
}
public void setManagers(Managers managers) {
this.managers = managers;
} }
 <?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="com.hibernate.o2o"> <class name="Departments" table="departments"> <id name="deptId" type="java.lang.Integer">
<column name="dept_Id" />
<!-- 指定主键的生成方式, native: 使用数据库本地方式 -->
<generator class="native" />
</id> <property name="deptName"
type="java.lang.String" column="deptName" >
</property>
//就把它当成自己的一个属性。
<many-to-one name="managers" class="Managers" column="manager_Id"></many-to-one> </class> </hibernate-mapping>
 package com.hibernate.o2o;

 public class Managers {
private Integer managerId;
private String managerName;
private Departments departments;
public Integer getManagerId() {
return managerId;
}
public void setManagerId(Integer managerId) {
this.managerId = managerId;
}
public String getManagerName() {
return managerName;
}
public void setManagerName(String managerName) {
this.managerName = managerName;
}
public Departments getDepartments() {
return departments;
}
public void setDepartments(Departments departments) {
this.departments = departments;
} }
<?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="com.hibernate.o2o"> <class name="Managers" table="managers" > <id name="managerId" type="java.lang.Integer">
<column name="manager_Id" />
<!-- 指定主键的生成方式, native: 使用数据库本地方式 -->
<generator class="native" />
</id> <property name="managerName"
type="java.lang.String" column="manager_Name" >
</property> <!-- 1-1的关联关系 property-ref="managers" 这句话的意思就是把部门表的经理列对应的数据库中表的字段作为连接条件。-->
<one-to-one name="departments" class="Departments" property-ref="managers"></one-to-one>
</class> </hibernate-mapping>

查询:

 1 @Test
2 public void testGet(){
3 //1. 默认情况下对关联属性使用懒加载
4 Department dept = (Department) session.get(Department.class, 1);
5 System.out.println(dept.getDeptName());
6
7 //2. 所以会出现懒加载异常的问题.
8 // session.close();
9 // Manager mgr = dept.getMgr();
10 // System.out.println(mgr.getClass());
11 // System.out.println(mgr.getMgrName());
12
13 //3. 查询 Manager 对象的连接条件应该是 dept.manager_id = mgr.manager_id
14 //而不应该是 dept.dept_id = mgr.manager_id
15 Manager mgr = dept.getMgr();
16 System.out.println(mgr.getMgrName());
17
18
19 }

查询2:

@Test
public void testGet2(){
//在查询没有外键的实体对象时, 使用的左外连接查询, 一并查询出其关联的对象
//并已经进行初始化.
Manager mgr = (Manager) session.get(Manager.class, 1);
System.out.println(mgr.getMgrName());
System.out.println(mgr.getDept().getDeptName());
}

利用主键生成关联映射

   需要依赖另一个表的主键来生成自己的主键。

 <?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="com.hibernate.o2o"> <class name="Departments" table="departments"> <id name="deptId" type="java.lang.Integer">
<column name="dept_Id" />
<!-- 使用外键的方式来生成当前的主键 -->
<!-- property 属性指定使用当前持久化类的哪一个属性的主键作为外键 -->
<generator class="foreign" >
<param name="property">managers</param>
</generator>
</id> <property name="deptName"
type="java.lang.String" column="deptName" >
</property>
<!--
采用 foreign 主键生成器策略的一端增加 one-to-one 元素映射关联属性,
其 one-to-one 节点还应增加 constrained=true 属性, 以使当前的主键上添加外键约束
-->
<one-to-one name="managers" class="Managers" constrained="true"></one-to-one> </class> </hibernate-mapping>

保存的时候。不论先保存哪一个。都是2条insert。因为dept是根据managers来生成主键的。

hibernate 1 对1的更多相关文章

  1. hibernate多对多关联映射

    关联是类(类的实例)之间的关系,表示有意义和值得关注的连接. 本系列将介绍Hibernate中主要的几种关联映射 Hibernate一对一主键单向关联Hibernate一对一主键双向关联Hiberna ...

  2. 解决 Springboot Unable to build Hibernate SessionFactory @Column命名不起作用

    问题: Springboot启动报错: Caused by: org.springframework.beans.factory.BeanCreationException: Error creati ...

  3. hibernate多对一双向关联

    关联是类(类的实例)之间的关系,表示有意义和值得关注的连接. 本系列将介绍Hibernate中主要的几种关联映射 Hibernate一对一主键单向关联Hibernate一对一主键双向关联Hiberna ...

  4. Hibernate中事务的隔离级别设置

    Hibernate中事务的隔离级别,如下方法分别为1/2/4/8. 在Hibernate配置文件中设置,设置代码如下

  5. Hibernate中事务声明

    Hibernate中JDBC事务声明,在Hibernate配置文件中加入如下代码,不做声明Hibernate默认就是JDBC事务. 一个JDBC 不能跨越多个数据库. Hibernate中JTA事务声 ...

  6. spring applicationContext.xml和hibernate.cfg.xml设置

    applicationContext.xml配置 <?xml version="1.0" encoding="UTF-8"?> <beans ...

  7. [原创]关于Hibernate中的级联操作以及懒加载

    Hibernate: 级联操作 一.简单的介绍 cascade和inverse (Employee – Department) Casade用来说明当对主对象进行某种操作时是否对其关联的从对象也作类似 ...

  8. hibernate的基本xml文件配置

    需要导入基本的包hibernate下的bin下的required和同bin下optional里的c3p0包下的所有jar文件,当然要导入mysql的驱动包了.下面需要注意的是hibernate的版本就 ...

  9. Maven搭建SpringMVC+Hibernate项目详解 【转】

    前言 今天复习一下SpringMVC+Hibernate的搭建,本来想着将Spring-Security权限控制框架也映入其中的,但是发现内容太多了,Spring-Security的就留在下一篇吧,这 ...

  10. 1.Hibernate简介

    1.框架简介: 定义:基于java语言开发的一套ORM框架: 优点:a.方便开发;           b.大大减少代码量;           c.性能稍高(不能与数据库高手相比,较一般数据库使用者 ...

随机推荐

  1. POJ 3348 Cows (凸包模板+凸包面积)

    Description Your friend to the south is interested in building fences and turning plowshares into sw ...

  2. Linux配置postfix

    启动报错:主机名不能以数字开头,否则报错

  3. paper 157:文章解读--How far are we from solving the 2D & 3D Face Alignment problem?-(and a dataset of 230,000 3D facial landmarks)

    文章:How far are we from solving the 2D & 3D Face Alignment problem?-(and a dataset of 230,000 3D ...

  4. js中的投掷筛子的小游戏

    代码 <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8&qu ...

  5. No orientation specified, and the default is horizontal.异常处理(转)

    参考:http://blog.csdn.net/sky_monkey/article/details/21466975 整的错误提示信息为: No orientation specified, and ...

  6. Docker 进入容器的4种方法

    在使用Docker创建了容器之后,大家比较关心的就是如何进入该容器了,其实进入Docker容器有好几多种方式,这里我们就讲一下常用的几种进入Docker容器的方法. 进入Docker容器比较常见的几种 ...

  7. Java多线程面试15道

    Java 线程面试问题 在任何Java面试当中多线程和并发方面的问题都是必不可少的一部分.如果你想获得任何股票投资银行的前台资讯职位,那么你应该准备很多关于多线程的问题.在投资银行业务中多线程和并发是 ...

  8. B. pSort

    题目链接: http://codeforces.com/problemset/problem/28/B 题意: 给一个n,原本有个1到n按顺序排列的序列,给一个序列问,在给一个数组,表示这个位置的数可 ...

  9. Can't connect to local MySQL server through socket '/opt/lampp/var/mysql/mysql.sock' (2)

    ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/opt/lampp/var/mysql/mysql.s ...

  10. 使用 内置函数strtok()函数实现 loadrunner 字符串替换

    Action(){ /* loadrunner 字符串替换 */ char separators[] = "/"; char * token; char * file_path; ...