博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【SSH系列】Hibernate映射 -- 一对一单向关联映射
阅读量:5814 次
发布时间:2019-06-18

本文共 2977 字,大约阅读时间需要 9 分钟。

       映射原理

       一对一关联映射:两个实体对象之间是一对一的关联映射,即一个对象只能与另外唯一的一个对象相对应。有两种策略可以实现一对一的关联映射:
       a、主键关联:即让两个对象具有相同的主键值,以表明她们之间的一一对应的关系;数据库表不会有额外的字段来维护她们之间的关系,仅通过表的主键来关联。
       b、唯一外键关联:外键关联,本来适用于多对一的配置,但是如果加上唯一的限制之后,也可以表示一对一关联关系,谈恋爱就是一一对应,一个男朋友对应一个女朋友,如果不是,只能说明道德问题,ok,再比如,我们每个人(person)只能有一张身份证(IdCard),不需要多余的外键字段来维护关系,仅通过主键来关联,即Person的主键要依赖IdCard的主键,他们共用一个主键值。接着,小编就person和idCard为例,讲解两种策略实现一对一的关联映射。不足之处,还请小伙伴们多多指教`(*∩_∩*)′。
      小编依然从uml图入手,了解她们的对象模型和关系模型,首先我们来看一对一的对象模型,类图如下所示:
                            

      从上面的uml类图包括实际生活中,我们很容易得出结论,一个人只有一张身份证,并且我们的身份证号码都是唯一的,因为我们每个人都是独一无二的Person和IdCard之间是一一对一的关系,Person持有IdCard的引用,所以,两个对象关系维护由Person端来决定。ok,接下来,小编分别讲解一对一单向关联映射的两种策略。

        主键关联
        根据上面的对象模型,我们画出下面的关系模型,如下所示:
              

        在博文的开头,小编已经介绍过,主键关联,即让两个对象具有相同的主键值,以表明她们之间的一一对应的关系;数据库表不会有额外的字段来维护她们之间的关系,仅通过表的主键来关联。结合我们person和idCard的例子,就是Person的主键要依赖IdCard的主键,他们共用一个主键值。 ok,接着,我们开始编写相应的代码。

       第一步、建立项目,编写Pserson和Person两个实体类,并且生成get和set方法代码如下所示,首先是Person类:

package com.bjpowernode.hibernate;public class Person {	private int id;	private String name;	private IdCard idCard;	public int getId() {		return id;	}	public IdCard getIdCard() {		return idCard;	}	public void setIdCard(IdCard idCard) {		this.idCard = idCard;	}	public void setId(int id) {		this.id = id;	}	public String getName() {		return name;	}	public void setName(String name) {		this.name = name;	}	}

       接着IdCard类,代码如下所示:

package com.bjpowernode.hibernate;public class IdCard {	private int id;	private String cardNo;	public int getId() {		return id;	}	public void setId(int id) {		this.id = id;	}	public String getCardNo() {		return cardNo;	}	public void setCardNo(String cardNo) {		this.cardNo = cardNo;	}	}
       第二步、编写Person.hbm.xml和IdCard.hbm.xml文件中的代码,首先Person.hbm.xml代码如下所示:

idCard
        接着编写IdCard.hbm.xml的代码,如下所示:

       第三步、编写hibernate.cfg.xml的代码,建立数据库并且添加相应的映射,代码如下所示:
com.mysql.jdbc.Driver
jdbc:mysql:///hibernate_one2one_pk_1
root
123456
org.hibernate.dialect.MySQLDialect
true
       接着,创建数据库,并且运行ExportDB,效果如下所示:

       

       ok,数据库已经建立好了,相应的表也已经生成,现在小编来编写相应的方法,向数据库中插入数据,运行效果如下所示:

        

        唯一外键关联

       上面介绍的是主键关联,小编开始介绍第二种唯一外键关联,根据上面的对象模型,关系模型如下所示:    

         

        我们依旧以上面的代码为例,相同的部分,小编就不再赘述了,IdCard.hbm.xml里面的内容不用变,ok接着Person.hbm.xml需要进行变动,代码如下所示:

idCard
      接着创建数据库,并且运行ExportDB,数据库已经建立好了,相应的表也已经生成,现在小编来编写相应的方法,向数据库中插入数据,运行效果如下所示:

       

       小编寄语:该博文,小编主要介绍了一对一单向关联映射,分别介绍了主键关联和唯一外键关联,配之demo进行讲解,但是一对一有两个缺点,灵活性较差,没有办法改成多对一关联映射,不能灵活应对千变万化的需求,必须先保存关联对象IdCard,之后才能保持Person;所以,在映射一对一单向关联映射时,我们通常唯一外键关联映射,在下篇博文中,小编将继续介绍hibernate中的映射,一对一双向关联映射,精彩未完待续……

转载地址:http://pbxbx.baihongyu.com/

你可能感兴趣的文章
thinkphp5中的一些关于命名空间的tisp
查看>>
[NIO-3]Socket通道
查看>>
ios之UILabel
查看>>
第6章-装饰模式
查看>>
CSRF与XSS攻击的原理与防范
查看>>
Java基础之String,StringBuilder,StringBuffer
查看>>
狼图腾读后感
查看>>
1月9日学习内容整理:爬虫基本原理
查看>>
根据百度API获得经纬度,然后根据经纬度在获得城市信息
查看>>
安卓中数据库的搭建与使用
查看>>
php 通过stomp协议连接ActiveMQ
查看>>
优先队列 HDOJ 5437 Alisha's Party
查看>>
Ucinet6 + Netdraw 根据excel文件绘制网络拓扑图
查看>>
Jmeter 使用集合点
查看>>
Top 100 微信公众号大全
查看>>
Review1-11
查看>>
学习dubbo遇到的问题1
查看>>
Vue中使用better-scroll实现下拉刷新,上拉加载功能。
查看>>
C#设计模式(1)-Abstract Factory Pattern
查看>>
WCF服务部署到IIS7.5
查看>>