(十)Hibernate的一对一关联关系
一、概述
我们以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的一对一关联关系相关推荐
- Hibernate 一对一关联关系
双向一对一关联关系: 域模型: 例如,部门只有一个部门经理,一个经理也只能管理一个部门.即,Department 中有一个Manager的引用,Manager 中又有一个Department 的引用. ...
- Hibernate关联关系映射之一对一关联关系
人和身份证之间就是一个典型的一对一关联关系.实现一对一关联关系映射的方式有两种一种是基于外键,一种是基于主键,下面我们先看基于外键的关联方式 首先看他们的实体类 Person类 ? 1 2 3 4 5 ...
- php一对一模型关联,通过实例学习Laravel模型中的一对一关联关系
通过实例学习Laravel模型中的一对一关联关系 一.前言 Laravel遵循[约定优于配置]的原则.PHP开发者只需要遵循Laravel框架的原则,就能减少大量的工作,这便是Laravel的魅力之一 ...
- hibernate中一对一关系映射
这篇文章讲述的是hibernate中一对一关系映射,如有错误或者不当之处还望各位大神批评指正. 一对一映射(外键关联) 目标 假设一个人对应养一只狗,一只狗只能由一个人来养,完成一对一相关操作. 类编 ...
- Hibernate(十):n-n关联关系
背景: 在实际开发中我们会遇到表的多对多关联,比如:一篇博客文章,它可以同时属于JAVA分类.Hibernate分类. 因此,我们在hibernate的学习文章系列中,需要学会如何使用hibernat ...
- Hibernate 双向一对一实现(基于annotation)
1.基于(foreign key)外键实现 国家<-------->首都 Country.java 1 package hibernate.orm.one2one.fk; 2 3 impo ...
- hibernate的一对一主键双向映射关系和外键双向映射关系(一)
主键关联的重点是关联的两个表共享一个主键值.本例中采用,一个单位在网上的一个系统中注册会员. 1,会员数据保存在会员表company中,每个会员的登录账号保存在表login中: 2,一个会员只有一个登 ...
- 【SSH进阶之路】Hibernate映射——一对一单向关联映射(五)
[SSH进阶之路]Hibernate基本原理(一) ,小编介绍了Hibernate的基本原理以及它的核心,采用对象化的思维操作关系型数据库. [SSH进阶之路]Hibernate搭建开发环境+简单实例 ...
- Hibernate学习4—关联关系一对多映射2
第四节:班级学生一对多映射实现(双向) 查询班级的时候能够获取所有的学生: 在上一节的基础之上:我们在Class端也保存学生的关系: com.cy.model.Class: public class ...
- 码农小汪-Hibernate学习8-hibernate关联关系注解表示@OneToMany mappedBy @ManyToMany @JoinTable...
近期我也是有点郁闷,究竟是程序中处理关联关系.还是直接使用外键处理关联关系呢?这个的说法不一致!程序中处理这样的关联关系的话.自己去维护这样的约束.这样的非常乐观的一种做法!或者是直接在数据库中处理这 ...
最新文章
- “我被机器解雇了!”Amazon 63岁员工因算法评分太低被自动开除
- 全国计算机二级计基础题第十五套,计算机等级考试:二级VFP机试第15套
- PHPExcel 去掉错误提示 保护表格
- 程序员的浪漫:女神节专用开源项目
- 前端一HTML:十六: 权重有关的练习
- jmeter HTTPS和HTTP的区别
- linux线程(互斥锁、条件)
- 欢乐纪中B组周五模拟赛【2019.3.8】
- CIO如何跟“IT盲”领导沟通
- (转)基于MVC4+EasyUI的Web开发框架形成之旅--基类控制器CRUD的操作
- 剑指offer——面试题64:数据流中的中位数
- L1-005 考试座位号 (15 分)—团体程序设计天梯赛
- I.MongoDB Features and Installation(Mongodb安装和介绍)
- Blocking waiting for file lock on package cache
- C语言谭浩强第三版例题及课后题汇总
- Delphi 7 在Win 7 下的安装使用
- 基于aspnet+20ajax问卷调查系统的设计和实现_百度文库,基于ASP.NET问卷调查系统的设计与实现.doc...
- 美国鲨鱼主机使用笔记
- WorkFlow:BPMN 2.0介绍(一):参与者(Participant)
- Docker/Podman使用提高---docker-compose基础(python3)
热门文章
- UOJ356 [JOI2017春季合宿] Port Facility 【启发式合并】【堆】【并查集】
- rac备份及恢复的重要概念之一——Redo Threads和Streams
- Python 中全局变量的实现
- CentOS安装vim
- DB2 9 根本(730 磨练)认证指南,第 3 部门: 谋面 DB2 数据(4)
- 117 Python程序中的线程操作-开启多线程(threading.Thread)
- Hotel 旅馆 题解(From luoguBlog)
- Python新手需要掌握的知识点
- hdu 6096 String(AC自动机巧妙建图)
- Oracle 语法之 OVER (PARTITION BY ..) 及开窗函数