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

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. 【JQGRID DOCUMENTATION】.学习笔记.6.Editing:Common Rules

    1 公共编辑属性 要在grid中显示数据的一个关键原因是能简单快速地编辑它.jgGrid提供三种编辑方式: cell editing:编辑指定cell inline editing:编辑同一行的几个c ...

  2. ectouch第六讲 之表常用链接

    ECTouch1.0 常用链接:精品属性商品mobile/index.php?m=default&c=category&type=best 新品属性商品mobile/index.php ...

  3. PHP serialize & JSON 解析

    对于JSON(JavaScript Object Notation)大家应该不陌生,它是一种轻量级的数据交换格式.易于人阅读和编写.同时也易于机器解析和生成.它基于JavaScript Program ...

  4. 对页面制定区域进行打印,以及打印不显示页脚URL的方法

    第一种方式 - 此种方式简单易用,但不能进行页面设置,会在底部显示页面的URL地址. 打印命令:只需在页面上的按钮事件调用这段JS代码 javascript:window.print(); ===== ...

  5. [UML]转:UML类图集中关系的总结

    转:http://blog.csdn.net/dragonpeng2008/article/details/6836448 在UML类图中,常见的有以下几种关系: 泛化(Generalization) ...

  6. cookie存储记录

    ////// 历史记录 $(function () { // 标题 var art_title = $("#Lbl_Hotel_Name").text(); // 得到当前路径 v ...

  7. iOS高仿app源码:纯代码打造高仿优质《内涵段子》

    iOS高仿app源码:纯代码打造高仿优质<内涵段子>收藏下来 字数1950 阅读4999 评论173 喜欢133 Github 地址 https://github.com/Charlesy ...

  8. phpcms 03

    继续上次对header.html文件的分析 logo<a href="{siteurl($siteid)}/"><img src="{IMG_PATH} ...

  9. js 10秒钟倒计时

    第一个: <html> <head> <meta http-equiv="Content-Type" content="text/html; ...

  10. 解决Win7下UAC开启时无法响应WM_DROPFILES消息

    //以管理员身份运行,程序窗口就可以接收到拖放文件消息[WM_DROPFILES]了. ChangeWndMessageFilterOk(WM_DROPFILES, MSGFLT_ADD); Chan ...