双向一对一关联关系:

域模型:

  例如,部门只有一个部门经理,一个经理也只能管理一个部门。即,Department 中有一个Manager的引用,Manager 中又有一个Department 的引用。

关系数据模型:

  按照主键映射: 这种方式跟 多对一关联关系非常相似,比如department 表有一个外键 MANAGER_ID 指向manager 表的ID, 此时Department 和 Manager 对应的这两张表是多对一的关联关系,为了实现一对一的关联关系,只要给 外键 MANAGER_ID 加上一个唯一约束,则可以实现一对一关联关系。

    需要注意的问题:

    ①、保存:建议先保存没有外键列的那一端的对象。

    ②、查询:默认情况下使用懒加载异常。

    ③、没有外键的一端需要使用 one-to-one 元素,该元素使用property-ref 属性指定使用 被关联实体主键以外的字段作为关联字段。

    ④、在查询没有外键关联的一端对象的时候,使用左外连接一并查询出其关联的对象,并进行初始化。

      也就是说:把懒加载属性设为true 的时候,查询 Manager 会一并把Department 查询出来,但是查询Department 并不会把Manager对象查询出来。

  按照外键映射:

    拥有外键的一端生成主键的方式要注意,不是使用 native ,而是使用 foreign

    示例:

    实体类按照主键映射的一样,区别在于映射文件。这里将映射文件代码贴出来。

Department类的映射文件

<class name="com.zcd.hibernate.oneToOnePrimary.Department" table="DEPARTMENT"><id name="id" type="java.lang.Integer"><column name="ID" /><generator class="foreign" >   <!-- 生成主键的方式 --><param name="property">manager</param>  <!-- 还要指定根据。。。 --></generator></id><property name="name" type="java.lang.String"><column name="NAME" /></property><one-to-one name="manager" class="com.zcd.hibernate.oneToOnePrimary.Manager" constrained="true"></one-to-one></class>

Manager的映射文件

<class name="com.zcd.hibernate.oneToOnePrimary.Manager" table="MANAGER"><id name="id" type="java.lang.Integer"><column name="ID" /><generator class="native" /></id><property name="name" type="java.lang.String"><column name="NAME" /></property><one-to-one name="department" class="com.zcd.hibernate.oneToOnePrimary.Department"></one-to-one></class>

不管先插入哪一个对象,都会先发送被拿主键来作为他人外键的那个对象的插入SQL语句,比如这里不管先插入Department 还是Manager,都会先发送插入Manager 的SQL语句。

有一个疑问:下面的代码为什么会保存两次 Manager 对象呢?

@Testpublic void testDepartmentAndManager(){Department department = new Department();department.setName("研发部");Manager manager = new Manager();manager.setName("BB");department.setManager(manager);manager.setDepartment(department);oneToOnePrimaryService.saveDepartment(department);oneToOnePrimaryService.saveManager(manager);}

Hibernate 一对一关联关系,使用外键映射和使用主键映射的区别:

目前发现的一点区别如下,以后发现了在进行添加。

  外键映射 主键映射
生成主键方式

使用native

<generator class="native" />

使用foreign还有

<generator class="foreign" ><param name="property">company</param>
</generator>

   使用many-to-one 加上unique属性,另一端不需要修改,按自动生成的使用  使用one-to-one,加上contrained="true"属性,另一端不需要修改,按自动生成的使用

转载于:https://www.cnblogs.com/GooPolaris/p/7919416.html

Hibernate 一对一关联关系相关推荐

  1. Hibernate关联关系映射之一对一关联关系

    人和身份证之间就是一个典型的一对一关联关系.实现一对一关联关系映射的方式有两种一种是基于外键,一种是基于主键,下面我们先看基于外键的关联方式 首先看他们的实体类 Person类 ? 1 2 3 4 5 ...

  2. Hibernate一对一关联映射配置

    一对一关联 Hibernate提供了两种映射一对一关联关系的方式:按照外键映射和按照主键映射.下面以员工账号和员工档案表为例,介绍这两种映射方式,并使用这两种映射方式分别完成以下持久化操作: (1)保 ...

  3. Hibernate 实体关联关系映射----总结

    http://lavasoft.blog.51cto.com/62575/39398 Hibernate 实体关联关系映射----总结 花了三天的业余时间,终于写完了Hibernate关联关系映射的所 ...

  4. hibernate.一对一关联

    实体类关系 一对一 一对多 多对一 多对多 Hibernate提供了两种映射一对一关联关系的方式:按照外键映射和按照主键映射.下面以员工账号和员工档案表为例,介绍这两种映射方式,并使用这两种映射方式分 ...

  5. hibernate 一对一(One-to-One)

    一对一(one-to-one)实例(Person-IdCard) 一对一的关系在数据库中表示为主外关系.例如.人和身份证的关系.每个人都对应一个身份证号.我们应该两个表.一个是关于人信息的表(Pers ...

  6. Hibernate 一对一外键单向关联

    [align=center][size=medium]Hibernate 一对一外键单向关联[/size][/align] 基于外键关联的单向一对一关联和单向多对一关联几乎是一样的.唯一的不同就是单向 ...

  7. Hibernate一对一映射示例注释

    Hibernate一对一映射示例注释 今天我们将研究Hibernate中的一对一映射.我们将使用Annotation和XML配置来研究Hibernate One To One Mapping示例. 目 ...

  8. php一对一模型关联,通过实例学习Laravel模型中的一对一关联关系

    通过实例学习Laravel模型中的一对一关联关系 一.前言 Laravel遵循[约定优于配置]的原则.PHP开发者只需要遵循Laravel框架的原则,就能减少大量的工作,这便是Laravel的魅力之一 ...

  9. hibernate一对一主键唯一外键关联(一)

    1.新建工程项目hibernate_one2one_ufk_1,添加hibernate所需Jar包和数据库驱动Jar包. 2.编写工具类HibernateUtils.java和ExportDB.jav ...

最新文章

  1. android系统应用程序,Android系统应用程序基本概念解读
  2. 【Nutch2.2.1基础教程之2.1】集成Nutch/Hbase/Solr构建搜索引擎之一:安装及运行【单机环境】...
  3. android 开源 示波器,上个老外的开源虚拟示波器
  4. seata分布式事务协调管理器是如何实现的
  5. ILS-LDA基于迭代最小二乘的字典学习算法的学习
  6. Range的学习笔记
  7. 关于eclipse中引入项目报错或者没有JRE System Library问题(jre报错)或者jre1.7(8)改为jre1.8(7)等问题...
  8. XenCenter开启虚机提示VDI不可用
  9. firework软件linux下,Linux 下的网页三剑客 都是免费的啊 (*^__^*)
  10. usb加密狗破解原理及方法介绍
  11. ubuntu16.04 lidar_align实现三维激光雷达和Imu联合标定
  12. 移动硬盘打不开提示格式化怎么办?
  13. 前端vue生成二维码
  14. [bzoj2827]千山鸟飞绝【splay】
  15. 20款免费备份文件软件
  16. 「维基解密」:西游记死亡人数
  17. POI最新版本 4.1.2 操作 Excel
  18. Fractions (水)
  19. vue中关于$emit及propos的用法
  20. 思科2018校招硬件测试笔试试题及答案

热门文章

  1. jquery对象和Dom对象的不同
  2. 对天天开心消消乐(订餐系统)的建议
  3. 分享20个非常有用的Web开发工具和框架
  4. NO。58 新浪微博顶部新评论提示层效果——position:fixed
  5. python的一些基本概念知识和面试题
  6. easyui datebox不可编辑设置
  7. JavaScript 闭包的详细分享(三种创建方式)(附小实例)
  8. IdentityServer4 配置负载均衡
  9. 从另一服务器传输文件到本服务器(服务器间传输文件)
  10. Mysql Federated Server 示例