双向一对一以部门和经理为例:

a.部门和经理类中各自由对方的引用:(省略了get/set方法)

b.数据库两种方式实现:一种(b.1)是外键映射,并将外键添加唯一约束(至于哪个对象的主键做外键,可随意,差别是在获取关联对象数据的方式上有些差异);第二种(b.2)方式是:主键映射即把外键作为主键。例子如下:

b.1:部门表的外键属于经理表的主键;外键manargerz_id设置唯一约束

b.2:主键映射:部门表的主键属于经理表的主键;(外键做主键)

c:映射配置也对应分两种,c.1外键映射配置和c.2主键映射配置

c.1配置外键映射:

部门类映射配置:配置的不同外键所属的表业不同:以部门表添加经理Id为外键:

以many-to-one 配置外键所属的表:即当前类所对应的表中添加外键;

colunm:外键的名称;

unique=true:表示外键唯一,即实现一对一关系

经理类映射配置:

注意:property-ref=mgr 表示:部门类mgr属性对应的mgr_id列;在获取经理对象时,会采用左连接的方式查询出部门数据;连接的条件由该属性指明;如果没有该属性默认              连接的是部门表主键而非外键;

c.2主键映射的方式:

部门对象映射配置:将部门表中属于经理表主键的外键作为主键为例:

上一个红框只是主键值获取的方式被确定;后一个指定约束,即对应的主表的主键不能随意修改的删除

经理映射配置如下:去掉指定的关联字段。

hibernate.cfg.xml(下):

d:测试(省略了session的获取提交和关闭)

d.1外键关联的测试:

保存:注意先后顺序;顺序不同实际执行的步骤不同;

获取:部门关联的对象会延迟加载;

通过dept获取经理对象并使时,在获取的时候会通过左连接的方式查询出经理对象;连接条件是经理映射配置中指定列;

(有点奇怪)(在获取经理对象时,经理对象内的引用部门的对象数据难道是查询出来的,而不是从session获取的? 难道这两个部门对象不是同一个对象,还是说,只是把数据检查更新了一遍;或者说获取某个对象时候,只会单向的从所对应的映射配置中查看是否有关联的字段,而不会去从关联的对象,查看关联对象的映射情况,这样的话,那两个部门对象就不是同一个对象了;这样会出现更多的问题,只能是同一个对象才不会一直重复去获取数据了,难道是获取数据后再从session中缓存中比较查找,而不是先从session查找?

直接获取经理对象采用左连接查询出经理对象同时查询出部门的数据(这个和一对多不一样啊:说hibernate不能知道关联,因为经理表没有外键,这个解释有点不通)

c.2主键关联的测试:

保存:(和外键关联不同)

顺序不同执行过程是一样的,因为部门记录插入,总要等到经理数据插入,以便获取到自己的主键值。

获取:(和外键关联差不多)

获取部门对象关联经理对象会采用延长加载的方式;通过部门对象获取的经理对象在使用时会,通过连接查询的方式获取;

获取经理数据时,会用一条连接语句同时获取部门数据

hibernate对象关系实现(二)一对一的更多相关文章

  1. hibernate对象关系映射( 一对一,一对多,多对一,多对多的单向,双向映射 ——)

    对象之间的关系: 关系映射之间的关系只的是对象之间的关系,并不指数据库表的关系(外键关系)这儿解决的问题是当对象之间的关系之一时,数据库表该如何映射,编程上如何对待. 一对一(主键关联,和单向的外键关 ...

  2. Hibernate学习笔记三:对象关系映射(一对一,一对多,多对一,多对多)

    如需转载,请说明出处:http://www.cnblogs.com/gudu1/p/6895610.html Hibernate通过关系映射来表示数据库中表与表之间的关系,关系映射可以通过两种方式:配 ...

  3. Hibernate:对象关系映射(一对一,一对多,多对一,多对多)

    如需转载,请说明出处:http://www.cnblogs.com/gudu1/p/6895610.html Hibernate通过关系映射来表示数据库中表与表之间的关系,关系映射可以通过两种方式:配 ...

  4. Hibernate表关系映射之一对一映射

    一.数据表的映射关系 在数据库领域中,数据表和数据表之间关系一般可以分为如下几种: 一对一:比如公民和身份证的关系,一个人只有一张身份证,同时每张身份证也仅仅对应一个人! 一对多:比如客户和订单之间的 ...

  5. hibernate对象关系实现(一)一对多

    hibernate是对jdk一个封装工具,实现对象和数据库之间数据映射.使用时涉及到四个问题:a.对象之间的关系在类中的体现:b,对象关系对应的数据库中表之间体现:c.实现a,b在hibernate的 ...

  6. Hibernate 对象关系映射文件

    简介: POJO 类和关系型数据库之间的映射可以用一个 XML 文档来定义 通过 POJO 类的数据库映射文件,Hibernate 可以理解持久化类和数据表之间的对应关系,也可以理解持久化类属性与数据 ...

  7. hibernate对象关系实现(三)多对多实现

    单向n-n:(catogory-item)一个类别对应多个条目,一个条目对应多个类别 a.以类别类中有条目的集合的引用为例: b.数据库中的体现:建立一个新表,以类别和条目的主键关联的外键做新表的联合 ...

  8. hibernate对象关系映射的配置

    一对一主键关联单双向 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-m ...

  9. hibernate对象关系实现(四)继承实现

    继承实现方式分为三种:subclass; joined-subclass;union-subclass a.类中体现   b.库中体现分为三种: b.1:一种方式:人和学生公用一张表,添加一个辨别字段 ...

随机推荐

  1. ecshop添加商品选择品牌时如何按拼音排序

    ECSHOP后台添加新商品时,有一个选择品牌的下拉框,如果品牌太多,在下拉框里查找起来很不方便. 我想给“下拉框里的品牌列表”按品牌名的拼音排序,比如有“中国水利出版社” “中国人民出版社” 这两个品 ...

  2. 层叠样式表(CSS)

    层叠样式表(CSS) CSS(Cascading Style Sheet)中文译为层叠样式表.是用于控制网页样式并允许将样式信息与网页内容分离的一种标记性语言.CSS的引入就是为了使得HTML语言能够 ...

  3. 杭电1013-Digitai Root(这是一道考研编程题-天大2015)

    Digital Roots Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tot ...

  4. 【转】启动 Eclipse 弹出“Failed to load the JNI shared library jvm.dll”错误的解决方法! .

    转载地址:http://blog.csdn.net/zyz511919766/article/details/7442633 原因1:给定目录下jvm.dll不存在. 对策:(1)重新安装jre或者j ...

  5. jQuery.validator 详解

    jQuery.validator 详解二 前言:上一篇详细的介绍了jQuery.validator( 版本v1.13.0 )的验证规则,这一篇重点讲述它的源码结构,及如何来对元素进行验证,错误消息提示 ...

  6. Windows上Python3.5安装Scrapy(lxml) 以及与twisted有关错误的解决

    转载于:http://www.cnblogs.com/silverbullet11/p/4966608.html 常用网址: Python 3.5: https://www.python.org/do ...

  7. Easyui Layout Center 全屏方法扩展

    $.extend($.fn.layout.methods, { full : function (jq) { return jq.each(function () { var layout = $(t ...

  8. Linux下svn提交文件后自动同步更新到网站目录

    有时,对于多文件需要上传到服务器的时候将会很麻烦,但是如果使用svn的钩子脚本就容易实现本地提交svn后,自动同步代码文件到远程服务器的网站目录下,而不必手动上传了. 首先,在网站目录下checkou ...

  9. JavaScript的条件语句

    JavaScript的条件语句 1.JavaScript的条件语句包括以下几个 (1)if - 只有当指定条件为true时,使用该语句来执行代码: (2)if...else - 当指定条件为true时 ...

  10. MySQL基础(二)——DDL语句

    MySQL基础(二)--DDL语句 1.什么是DDL语句,以及DDL语句的作用 DDL语句时操作数据库对象的语句,这些操作包括create.drop.alter(创建.删除.修改)数据库对象. 2.基 ...