Hibernate(11)_基于外键的双向1对1
一、基于外键的双向1对1
- 对于基于外键的1-1关联,其外键可以存放在任意一边,在需要存放外键一端,增加many-to-one元素。为many-to-one元素增加unique=“true” 属性来表示为1-1关联
另一端需要使用one-to-one元素,该元素使用 property-ref 属性指定使用被关联实体主键以外的字段作为关联字段
1.实体类
部门类(Department .java)
public class Department {
private Integer dId;
private String dName;
private Manager manager;
//忽略getter和setter方法
...
}
管理者类(Manager .java)
public class Manager {
private Integer mId;
private String mName;
private Department department;
//忽略getter和setter方法
...
}
2.映射文件
Department.hbm.xml
<!-- 基于外键的一对一映射,该映射与多对一实质相同,是多对一关联的一个特例,外键可以放到任意一端,
在存放外键的一端使用<Many-to-one>元素,并在该元素中添加unique属性,且设置值true,表示多的一方也必须唯一
在另一端使用<one-to-one>元素。
-->
<many-to-one name="manager" class="Manager"
column="M_ID" unique="true">
</many-to-one>
Manager.hbm.xml
<!-- 没有外键的一端在对应的数据表中已经有外键了,当前持久化类使用one-to-one进行映射
property-ref:指定使用被关联的实体主键以外的字段作为关联字段
-->
<one-to-one name="department"
class="com.withXml.bothOneToOne.entity.
withForeignKey.Department"
property-ref="manager">
</one-to-one>
3.CRUD测试
/**
* 保存操作
*/
@Test
public void testOneToOneSave(){
//新建部门对象
Department department = new Department();
department.setdName("财务部");
//新建管理者对象
Manager manager = new Manager();
manager.setmName("张铭");
//设定关联关系
department.setManager(manager);
manager.setDepartment(department);
//执行保存,先保存没有外键列的对象,这样就会减少update语句,即先保存manage后保存department
session.save(manager);
session.save(department);
}
/**
* 查询操作
*/
@Test
public void testOneToOneGet(){
//默认情况下,对关联属性使用懒加载,所以会出现懒加载异常
Department department = (Department) session.get(Department.class, 1);
System.out.println(department.getdName());
//出现懒加载异常
// session.close();
// Manager managerName = department.getManager();
//无异常,仅仅是显示对象的类型
// System.out.println(managerName.getClass());
//有异常,使用到了对象的属性
// System.out.println(managerName.getmName());
//
Manager managerName = department.getManager();
System.out.println(managerName.getmName());
}
/**
* 查询操作
*/
@Test
public void testOneToOneGet2(){
//在查询没有外键的一端对象时,使用左外连接一并查出其关联的对象,并已经初始化
Manager manager = (Manager) session.get(Manager.class, 1);
System.out.println(manager.getmName());
}
Hibernate(11)_基于外键的双向1对1的更多相关文章
- Hibernate(12)_基于主键的双向1对1
一.基于主键的双向1对1 1.介绍: 基于主键的映射策略:指一端的主键生成器使用 foreign 策略,表明根据"对方"的主键来生成自己的主键,自己并不能独立生成主键. <p ...
- Hibernate关系映射(二) 基于外键的双向一对一
基于外键的双向一对一关联映射 需要在一端添加<one-to-one>标签,用property-ref来指定反向属性引用. 还是通过刚才用户和地址来演示双向一对一关联. 代码演示 一.实体类 ...
- Hibernate 基于外键的双向一对一关联映射
之前简单介绍了基于外键的单项一对一的关联映射关系,本文简单介绍基于外键的双向一对一的关联映射. 1.设计表结构 表结构对于双向一对一来说没有多少改变,只是双向都可以获取到对方. 2.创建Person对 ...
- java之hibernate之基于外键的双向一对一关联映射
这篇讲解 基于外键的双向一对一关联映射 1.考察如下信息,人和身份证之间是一个一对一的关系.表的设计 2.类结构 Person.java public class Person implements ...
- Hibernate学习(二补充)关系映射----基于外键的双向一对一
刚刚写的是基于外键的单向一对一. 那么双向一对一就是在单向一对一的基础上稍微改动就可以了. account.java和account.hbm.xml都不用变动 只要我们小小的变动address.j ...
- 注解:【基于外键的】Hibernate双向1->1关联
Person与Address关联:双向1->1,[基于外键的]. #主表不应该控制关联关系.(否则会导致生成额外的update语句,从而导致性能下降), #因此主表对应的实体中使用@OneToO ...
- 注解:【基于外键的】Hibernate单向1->1关联
Person与Address关联:单向1->1,[基于外键的] Person.java package org.crazyit.app.domain; import javax.persiste ...
- Hibernate学习(二)关系映射----基于外键的单向一对一
事实上,单向1-1与N-1的实质是相同的,1-1是N-1的特例,单向1-1与N-1的映射配置也非常相似.只需要将原来的many-to-one元素增加unique="true"属性, ...
- Hibernate之基于外键映射的一对一(1-1)关联关系
1.对于基于外键的1-1关联,其外键可以存放在任意一边,在需要存放外键一端,增加many-to-one元素.为many-to-one元素增加unique="true"属性来表示为1 ...
随机推荐
- UIActionSheet的常用方法
enum UIActionSheetStyle : Int { case Automatic // take appearance from toolbar style otherwise uses ...
- url、querystring模块获取请求request.url中的不同部分图解
url.parse(string).query | url.parse(string).pathname | | | | | ------ ------------------- http://loc ...
- JDK5的新特性之可变参数&Arrays.asList()方法
[代码] package com.hxl; import java.util.Arrays; import java.util.List; public class Test { public sta ...
- 004 Java的一次面试题,学长列举
据说是Java的面试题,感觉有些汗颜,所以决定研究一下. 1.线程.进程.协程的区别,他们怎么进行线程的交互? 2.k8s内的scheduler怎么做的,流程?跟etcd怎么交互? 3.hashmap ...
- Linux下的Mysql数据库备份+还原
数据库备份: root@debian-mm:/home/debian-mm# mysqldump -u root -p Account > Account.sql Enter password: ...
- windows下编译php7图形库php_ui.dll
CSDN博客 具有图形化编程才有意思,这几天看到了php ui 图形扩展,只是现在只能下载php 7.1的 本次教程编译php7.2.6的 php ui 要是linux下编译起来比较简单 但是 win ...
- 使用PHPStorm 配置自定义的Apache与PHP环境
使用PHPStorm 配置自定义的Apache与PHP环境之一 关于phpstorm配置php开发环境,大多数资料都是直接推荐安装wapmserver.而对于如何配置自定义的PHP环境和Apach ...
- Django分页(一)
Django分页(一) 手动实现简单分页 HTML <!DOCTYPE html> <html lang="en"> <head> <me ...
- SpringSecurity整合JWT
一.前言 最近负责支付宝小程序后端项目设计,这里主要分享一下用户会话.接口鉴权的设计.参考过微信小程序后端的设计,会话需要依靠redis.相关的开发人员和我说依靠Redis并不是很靠谱,redis在业 ...
- 安装supset遇到的问题
1.缺少pyconfig.h文件问题(python3.4) 执行下列两行命令: $sudo apt-get install build-essential cmake $sudo apt-get in ...