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

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程序中删除字符串最后一个字符的三种方法

    常见的语法格式: foreach ($arr as $key => $value) {$arr_str = $arr['x_id'] . ',' . $arr_str;} 假设字符数组 $arr ...

  2. syntactically incorrect() 404

    遇到这个错误就来记录一下吧. 这个错误是springMVC报出的错误.大致的意思就是form传值的类型和controller中的参数不符. 有可能是名字错误,有可能是类型不对.比如前面你传来的是  p ...

  3. JQuery-遮罩层

    HTML <html> <head> <link href="StyleSheet.css" rel="stylesheet" t ...

  4. JAVA基础知识之网络编程——-使用MutilcastSocket实现多点广播

    IP多点广播原理 设置一组特殊网络地址作为多点广播地址,每一个多点广播地址都被看作一个组,当客户需要发送和接受信息时,加入到该组即可. IP协议为多点广播提供了一批特殊的IP地址,范围是224.0.0 ...

  5. JMeter基于http请求的web接口性能测试总结

    [本文出自天外归云的博客园] 基于http请求的web接口性能测试总结 压测的目的:对于Web接口压测的目的最终是要在对数据库造成压力的情况下观察压测服务器的cpu是否达到预警值.memory是否发生 ...

  6. 局域网无法访问vmware虚拟机WEB服务器解决办法

    环境:虚拟机服务器是centos,apache+php+mysql环境,但是局域网无法访问 1.本机能ping通虚拟机 2.虚拟机也能ping通本机 3.虚拟机能访问自己的web 4.本机无法访问虚拟 ...

  7. C#窗体四边框阴影效果的实现

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  8. MySQL中别名的使用

    MySQL中别名的使用 为数据列或者表达式起别名时,别名紧跟数据列,中间以空格隔开,或者用关键字as隔开. #为表达式起别名 使用as关键字隔开 as T_ID from teacher_table; ...

  9. SqlSever基础 top 后面的n 由一个简单的计算式子计算得出

    镇场诗:---大梦谁觉,水月中建博客.百千磨难,才知世事无常.---今持佛语,技术无量愿学.愿尽所学,铸一良心博客.------------------------------------------ ...

  10. SUSE Linux Enterprise Server 设置防火墙开启ssh远程端口

    1.vi /etc/sysconfig/SuSEfirewall2   #编辑防火墙设置 FW_SERVICES_EXT_TCP="22"   #开启22端口 rcSuSEfire ...