一、概述

我们以Company与Address类为例,介绍映射一对一关联关系的方法。 
一对一的关联方法有两种 
-按照外键映射:两个表任意一个表定义一个外键,来关联另一个表。 
-按照主键映射:一个表的主键同时作为外键,和另一个表的主键保持一致。

二、按照外键映射

(1)创建实体类

            public class Company {private Integer id;private String name;private Address address;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Address getAddress() {return address;}public void setAddress(Address address) {this.address = address;}} public class Address {private Integer id;private String name;private Company company;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Company getCompany() {return company;}public void setCompany(Company company) {this.company = company;}}

  (2)我们配置映射文件,我们在Company这一方设置外键来关联Address 有外键的一方要使用<many-to-one>元素来配置。

        Company.hbm.xml<hibernate-mapping ><class name="com.cad.domain.Company" table="company"><id name="id" column="id"><generator class="native"></generator></id><property name="name" column="name"></property> <!--column指定外键,unique指定外键唯一约束,设为true,就可以表达Company和Address对象之间的一对一关联--><many-to-one name="address" class="com.cad.domain.Address" column="aid" unique="true"></many-to-one></class></hibernate-mapping>   Address.hbm.xml <hibernate-mapping ><class name="com.cad.domain.Address" table="address"><id name="id" column="id"><generator class="native"></generator></id><property name="name" column="name"></property> <!--property-ref属性指定通过从Company的address属性来查找自己--><one-to-one name="Company" class="com.cad.domain.Company" property-ref="address"></one-to-one></class></hibernate-mapping>

  测试:

                 public class Demo {private Session session;@Testpublic void test() {//读取配置文件Configuration conf=new Configuration().configure();//根据配置创建factorySessionFactory sessionfactory=conf.buildSessionFactory();session = sessionfactory.openSession(); Transaction ts=session.beginTransaction();Company c=new Company();c.setName("百度");Address a=new Address();a.setName("深圳");c.setAddress(a);a.setCompany(c);session.save(a);session.save(c); ts.commit();session.close();sessionfactory.close();}}默认情况下,一对一关联采用迫切左外连接检索策略。

  

三、按照主键映射

    实体类不变,我们编写一下配置文件address的表的id字段既是主键又是外键.编写配置文件Company.hbm.xml <hibernate-mapping ><class name="com.cad.domain.Company" table="company"><id name="id" column="id"><generator class="native"></generator></id><property name="name" column="name"></property><one-to-one name="address" class="com.cad.domain.Address" ></one-to-one></class></hibernate-mapping> Address.hbm.xml <hibernate-mapping ><class name="com.cad.domain.Address" table="address"><id name="id" column="id"><!--必须使用foreign标识符生成策略,还要指定哪个对象共享OID--><generator class="foreign"><param name="property">company</param></generator></id><property name="name" column="name"></property><!--constrained属性设为true,说明主键同时作为外键--><one-to-one name="company" class="com.cad.domain.Company" constrained="true"></one-to-one></class></hibernate-mapping>

  

转载于:https://www.cnblogs.com/yuexiaoyun/p/9452411.html

(十)Hibernate的一对一关联关系相关推荐

  1. Hibernate 一对一关联关系

    双向一对一关联关系: 域模型: 例如,部门只有一个部门经理,一个经理也只能管理一个部门.即,Department 中有一个Manager的引用,Manager 中又有一个Department 的引用. ...

  2. Hibernate关联关系映射之一对一关联关系

    人和身份证之间就是一个典型的一对一关联关系.实现一对一关联关系映射的方式有两种一种是基于外键,一种是基于主键,下面我们先看基于外键的关联方式 首先看他们的实体类 Person类 ? 1 2 3 4 5 ...

  3. php一对一模型关联,通过实例学习Laravel模型中的一对一关联关系

    通过实例学习Laravel模型中的一对一关联关系 一.前言 Laravel遵循[约定优于配置]的原则.PHP开发者只需要遵循Laravel框架的原则,就能减少大量的工作,这便是Laravel的魅力之一 ...

  4. hibernate中一对一关系映射

    这篇文章讲述的是hibernate中一对一关系映射,如有错误或者不当之处还望各位大神批评指正. 一对一映射(外键关联) 目标 假设一个人对应养一只狗,一只狗只能由一个人来养,完成一对一相关操作. 类编 ...

  5. Hibernate(十):n-n关联关系

    背景: 在实际开发中我们会遇到表的多对多关联,比如:一篇博客文章,它可以同时属于JAVA分类.Hibernate分类. 因此,我们在hibernate的学习文章系列中,需要学会如何使用hibernat ...

  6. Hibernate 双向一对一实现(基于annotation)

    1.基于(foreign key)外键实现 国家<-------->首都 Country.java 1 package hibernate.orm.one2one.fk; 2 3 impo ...

  7. hibernate的一对一主键双向映射关系和外键双向映射关系(一)

    主键关联的重点是关联的两个表共享一个主键值.本例中采用,一个单位在网上的一个系统中注册会员. 1,会员数据保存在会员表company中,每个会员的登录账号保存在表login中: 2,一个会员只有一个登 ...

  8. 【SSH进阶之路】Hibernate映射——一对一单向关联映射(五)

    [SSH进阶之路]Hibernate基本原理(一) ,小编介绍了Hibernate的基本原理以及它的核心,采用对象化的思维操作关系型数据库. [SSH进阶之路]Hibernate搭建开发环境+简单实例 ...

  9. Hibernate学习4—关联关系一对多映射2

    第四节:班级学生一对多映射实现(双向) 查询班级的时候能够获取所有的学生: 在上一节的基础之上:我们在Class端也保存学生的关系: com.cy.model.Class: public class ...

  10. 码农小汪-Hibernate学习8-hibernate关联关系注解表示@OneToMany mappedBy @ManyToMany @JoinTable...

    近期我也是有点郁闷,究竟是程序中处理关联关系.还是直接使用外键处理关联关系呢?这个的说法不一致!程序中处理这样的关联关系的话.自己去维护这样的约束.这样的非常乐观的一种做法!或者是直接在数据库中处理这 ...

最新文章

  1. “我被机器解雇了!”Amazon 63岁员工因算法评分太低被自动开除
  2. 全国计算机二级计基础题第十五套,计算机等级考试:二级VFP机试第15套
  3. PHPExcel 去掉错误提示 保护表格
  4. 程序员的浪漫:女神节专用开源项目
  5. 前端一HTML:十六: 权重有关的练习
  6. jmeter HTTPS和HTTP的区别
  7. linux线程(互斥锁、条件)
  8. 欢乐纪中B组周五模拟赛【2019.3.8】
  9. CIO如何跟“IT盲”领导沟通
  10. (转)基于MVC4+EasyUI的Web开发框架形成之旅--基类控制器CRUD的操作
  11. 剑指offer——面试题64:数据流中的中位数
  12. L1-005 考试座位号 (15 分)—团体程序设计天梯赛
  13. I.MongoDB Features and Installation(Mongodb安装和介绍)
  14. Blocking waiting for file lock on package cache
  15. C语言谭浩强第三版例题及课后题汇总
  16. Delphi 7 在Win 7 下的安装使用
  17. 基于aspnet+20ajax问卷调查系统的设计和实现_百度文库,基于ASP.NET问卷调查系统的设计与实现.doc...
  18. 美国鲨鱼主机使用笔记
  19. WorkFlow:BPMN 2.0介绍(一):参与者(Participant)
  20. Docker/Podman使用提高---docker-compose基础(python3)

热门文章

  1. UOJ356 [JOI2017春季合宿] Port Facility 【启发式合并】【堆】【并查集】
  2. rac备份及恢复的重要概念之一——Redo Threads和Streams
  3. Python 中全局变量的实现
  4. CentOS安装vim
  5. DB2 9 根本(730 磨练)认证指南,第 3 部门: 谋面 DB2 数据(4)
  6. 117 Python程序中的线程操作-开启多线程(threading.Thread)
  7. Hotel 旅馆 题解(From luoguBlog)
  8. Python新手需要掌握的知识点
  9. hdu 6096 String(AC自动机巧妙建图)
  10. Oracle 语法之 OVER (PARTITION BY ..) 及开窗函数