hibernate 1 对1
举例:部门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的更多相关文章
- hibernate多对多关联映射
关联是类(类的实例)之间的关系,表示有意义和值得关注的连接. 本系列将介绍Hibernate中主要的几种关联映射 Hibernate一对一主键单向关联Hibernate一对一主键双向关联Hiberna ...
- 解决 Springboot Unable to build Hibernate SessionFactory @Column命名不起作用
问题: Springboot启动报错: Caused by: org.springframework.beans.factory.BeanCreationException: Error creati ...
- hibernate多对一双向关联
关联是类(类的实例)之间的关系,表示有意义和值得关注的连接. 本系列将介绍Hibernate中主要的几种关联映射 Hibernate一对一主键单向关联Hibernate一对一主键双向关联Hiberna ...
- Hibernate中事务的隔离级别设置
Hibernate中事务的隔离级别,如下方法分别为1/2/4/8. 在Hibernate配置文件中设置,设置代码如下
- Hibernate中事务声明
Hibernate中JDBC事务声明,在Hibernate配置文件中加入如下代码,不做声明Hibernate默认就是JDBC事务. 一个JDBC 不能跨越多个数据库. Hibernate中JTA事务声 ...
- spring applicationContext.xml和hibernate.cfg.xml设置
applicationContext.xml配置 <?xml version="1.0" encoding="UTF-8"?> <beans ...
- [原创]关于Hibernate中的级联操作以及懒加载
Hibernate: 级联操作 一.简单的介绍 cascade和inverse (Employee – Department) Casade用来说明当对主对象进行某种操作时是否对其关联的从对象也作类似 ...
- hibernate的基本xml文件配置
需要导入基本的包hibernate下的bin下的required和同bin下optional里的c3p0包下的所有jar文件,当然要导入mysql的驱动包了.下面需要注意的是hibernate的版本就 ...
- Maven搭建SpringMVC+Hibernate项目详解 【转】
前言 今天复习一下SpringMVC+Hibernate的搭建,本来想着将Spring-Security权限控制框架也映入其中的,但是发现内容太多了,Spring-Security的就留在下一篇吧,这 ...
- 1.Hibernate简介
1.框架简介: 定义:基于java语言开发的一套ORM框架: 优点:a.方便开发; b.大大减少代码量; c.性能稍高(不能与数据库高手相比,较一般数据库使用者 ...
随机推荐
- kylin相关问题
1.Kylin踩坑笔记 - 启动Kylin出现Could not find or load main class org.apache.hadoop.hbase.util.GetJavaPropert ...
- boost asio scalability and multithreading
A library such as Boost.Asio is typically used to achieve greater efficiency. With no need to wait f ...
- make编写教程(一)
1. make规则 如果工程没有被编译过,则所有的c文件都要编译和链接 如果工程的某几个c文件被修改,那么只编译被修改的文件,并链接目标程序 如果工程的头文件被修改,需要编译引用了此头文件的c文件,并 ...
- LDD3 第10章 中断处理
各种硬件和处理器打交道的周期不同,并且总是比处理器慢.必须有一种可以让设备在产生某个事件时通知处理器----中断. 中断仅仅是一个信号,如果硬件需要,就可以发送这个信号.Linux处理中断方式和用户空 ...
- vue工程本地代码请求http发生跨域提示错误解决方法
这个可以使用代理进行跨域,这样看来跨域的方法就有几种了,对于iframe中的用postmassage,对于vue工程中的跨域则使用代理模式. 代理模式配置如下: 在config文件夹下找到index. ...
- MSSQL数据库表结构无法更改
工具->Designers-> 组织保存要求重新创建表的更改 -> 把这个钩去掉就可以了
- 用 Flask 来写个轻博客 (33) — 使用 Flask-RESTful 来构建 RESTful API 之二
Blog 项目源码:https://github.com/JmilkFan/JmilkFan-s-Blog 目录 目录 前文列表 扩展阅读 构建 RESTful Flask API 定义资源路由 格式 ...
- nginx相关总结
1. Nginx 无法启动解决方法 在查看到 logs 中报了如下错误时: 0.0.0.0:80 failed (10013: An attempt was made to access a sock ...
- 【Oracle】详解v$session
首先查看一下v$session都存在哪些列 SYS@ORCL>desc v$session Name Null? ...
- Java并发Lock接口
java.util.concurrent.locks.Lock接口用作线程同步机制,类似于同步块.新的锁定机制更灵活,提供比同步块更多的选项. 锁和同步块之间的主要区别如下: 序列的保证 - 同步块不 ...