hibernate对象关系实现(二)一对一
双向一对一以部门和经理为例:
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对象关系实现(二)一对一的更多相关文章
- hibernate对象关系映射( 一对一,一对多,多对一,多对多的单向,双向映射 ——)
对象之间的关系: 关系映射之间的关系只的是对象之间的关系,并不指数据库表的关系(外键关系)这儿解决的问题是当对象之间的关系之一时,数据库表该如何映射,编程上如何对待. 一对一(主键关联,和单向的外键关 ...
- Hibernate学习笔记三:对象关系映射(一对一,一对多,多对一,多对多)
如需转载,请说明出处:http://www.cnblogs.com/gudu1/p/6895610.html Hibernate通过关系映射来表示数据库中表与表之间的关系,关系映射可以通过两种方式:配 ...
- Hibernate:对象关系映射(一对一,一对多,多对一,多对多)
如需转载,请说明出处:http://www.cnblogs.com/gudu1/p/6895610.html Hibernate通过关系映射来表示数据库中表与表之间的关系,关系映射可以通过两种方式:配 ...
- Hibernate表关系映射之一对一映射
一.数据表的映射关系 在数据库领域中,数据表和数据表之间关系一般可以分为如下几种: 一对一:比如公民和身份证的关系,一个人只有一张身份证,同时每张身份证也仅仅对应一个人! 一对多:比如客户和订单之间的 ...
- hibernate对象关系实现(一)一对多
hibernate是对jdk一个封装工具,实现对象和数据库之间数据映射.使用时涉及到四个问题:a.对象之间的关系在类中的体现:b,对象关系对应的数据库中表之间体现:c.实现a,b在hibernate的 ...
- Hibernate 对象关系映射文件
简介: POJO 类和关系型数据库之间的映射可以用一个 XML 文档来定义 通过 POJO 类的数据库映射文件,Hibernate 可以理解持久化类和数据表之间的对应关系,也可以理解持久化类属性与数据 ...
- hibernate对象关系实现(三)多对多实现
单向n-n:(catogory-item)一个类别对应多个条目,一个条目对应多个类别 a.以类别类中有条目的集合的引用为例: b.数据库中的体现:建立一个新表,以类别和条目的主键关联的外键做新表的联合 ...
- hibernate对象关系映射的配置
一对一主键关联单双向 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-m ...
- hibernate对象关系实现(四)继承实现
继承实现方式分为三种:subclass; joined-subclass;union-subclass a.类中体现 b.库中体现分为三种: b.1:一种方式:人和学生公用一张表,添加一个辨别字段 ...
随机推荐
- iOS 证书申请和使用详解(详细版)
对于iOS开发者来说,apple开发者账号肯定不会陌生.在开发中我们离不开它.下面我简单的为大家分享一下关于iOS开发中所用的证书相关知识. 第一部分:成员介绍 1.Certification(证书) ...
- C#:序列化值与解码二进制
1.将对象序列化为二进制值,供WebBrowser传值: private static byte[] PostDataToBytes(Data postData) { JavaScriptSerial ...
- 一个很不错的bash脚本编写教程
转自 http://blog.chinaunix.net/uid-20328094-id-95121.html 一个很不错的bash脚本编写教程,至少没接触过BASH的也能看懂! 建立一个脚本 Lin ...
- SpringMVC 接收ajax发送的数组对象
本文粘贴自:http://my.oschina.net/jiefalcon/blog/384153?fromerr=24Lewn46 [转]SpringMVC @RequestBody接收Json对象 ...
- 上传文件时,Request报文头不同浏览器会产生不同的content-type
选择一个zip文件上传,用IE看的报文头是image/jpeg,用chrom看是application/octet-stream. 第一次遇到这个类型的content-type,百度了一下, octe ...
- DAO模型设计实现数据的 增,删,改,查方法
连接数据库方法,及反射获取数据,以前的方法相同,测试类 是在DAO模型下建立的 ------------------------------------------------------------ ...
- javaScript判断鼠标滚轮的上下滚动
分享一个js实现判断鼠标滚轮的上下滚动: <script type="text/javascript"> var scrollFunc = function (e) { ...
- 【算法】简单动态规划——三逆数的O(N^2)解法!
问题描述: 三逆数定义:给一个数的序列A[0,1,....N-1]),当i<j<k且A[i]>A[j]>A[k]时,称作ai,aj,ak为一个三逆数. 现在给定一个长度为N的数 ...
- C#中容易被忽视的细节整理
(有空更新系列) 1.params可变长度参数,默认值是长度为0的数组,而不是空 2.事件和委托默认值都是null 3.bool返回值的事件调用之后,其内部的合并方式是取最后一个合并对象的返回值
- github pages搭建个人网站如何添加导航
折腾过github pages的同学都清楚使用jekyll搭建个人网站的目录结构,而导航最终的代码是在使用的主题目录中的default.html文件中的. 我的结构如下: . ├── .html ├─ ...