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

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. 关于PHP的正则表达式

    1.入门简介 简单的说,正则表达式是一种可以用于模式匹配和替换的强有力的工具.我们可以在几乎所有的基于UNIX系统的工具中找到正则表达式的身影,例如,vi编辑器,Perl或PHP脚本语言,以及awk或 ...

  2. easyui设置界面的高度自适应

    单独设置界面中特定region区时,高度自适应失败:设置整个界面时成功.实现代码在script块中,具体代码如下: <%@ Page Language="C#" AutoEv ...

  3. linux下访问中文目录文件

    文件路径包含中文时,可输入部分文件名,然后按Tab键. 当路径包含中文括号时,用斜杠,如: \(….\) . 也可用 ls -li ,先查看inum(inode编号),然后再根据编号进行访问,用查找命 ...

  4. 仿iOS底部弹出popUpWindow

    上面为弹出来的效果 popUpWindow布局: <?xml version="1.0" encoding="utf-8"?> <Linear ...

  5. linux中利用awk对数组进行排序

    数组 在排序前需要对数组有所了解,数组是用于存储一系列值得变量,这些值之间通常是由联系的,可通过索引来访问数组的值,索引需要用括号括起来,基本格式如下: array[index]=value awk数 ...

  6. Moo University - Financial Aid

    Moo University - Financial Aid Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 6020 Accep ...

  7. 测试-Animator的“当前剪辑CurrentAnimatorStateInfo”

    左边是Transport到Idle,右边是完全到Idle 当进入过渡时,事实上Transport状态并未结束,通过下面打印出来的hash可以看出还是Transport的状态 过渡结束才正式变为Idle ...

  8. CSUFT 1003 All Your Base

    1003: All Your Base Time Limit: 1 Sec      Memory Limit: 128 MB Submit: 4      Solved: 2 Description ...

  9. WF3.0 CallExternalMethod使用技巧

    CallExternalMethod用于工作流向宿主进程中通信 简单的介绍一下它的使用技巧,参照网上的一个questioner源码进行了改进,因为我感觉这个源码提供的通信demo过于繁琐. 看看ser ...

  10. exp函数

    第一种是tensor用exp函数 th> a [torch.DoubleTensor of size 1x3] [.0002s] th> a:exp() 2.7183 2.7183 1.0 ...