第九章 关系映射 一对一关系 唯一外键方式实现一对一

简介: <p><strong><span style="white-space:pre"></span>如:person与idCard</strong></p> <p align="left"><span style="white-space:pre"></span>基于外键的one-to-one可以描述为多对一。</p> <p align="left"> <span style="white

如:person与idCard

基于外键的one-to-one可以描述为多对一。

  hibernate 一对一唯一外键关联映射(双向关联 Person<---->IdCard ) 
         一对一唯一外键 双向 关联,需要在另一端(person ),添加 <one-to-one> 标签,指示 hibernate 如何加载 其关联对象,默认根据主键加载idcard ,外键关联映射中,因为两个实体采用的是 idcard 的外键维护的关系, 所以不能指定主键加载 idcard ,而要根据 idcard 的外键加载,所以采用如下映射方式: 
        <one-to-onename="idcard" property-ref="person"/>

id_card表中有一个person_id的外键。

实体类和根据共享主键方式中的一样,不变。


Person.hbm.xml:

<hibernate-mapping>
    <class name="cn.framelife.hibernate.entity.Person" table="person" catalog="hibernate">
        <id name="id" type="java.lang.Integer">
            <column name="id" />
            <generator class="native" />
        </id>
        <property name="name" type="java.lang.String">
            <column name="name" length="45" not-null="true" />
        </property>
         <!-- 没有下面的one-to-one标签也行,但那样就变成了单向关联(IdCard ----》 Person) ,也就是当知道IdCard后,能找到它属于的对应的人,但知道某人后,却无法找到相对应的IdCard-->  
        <one-to-one name="idCard" property-ref="person"/>  
    </class>
</hibernate-mapping>

IdCard.hbm.xml:

<hibernate-mapping>
	<class name="cn.framelife.hibernate.entity.IdCard" table="id_card"
		catalog="hibernate">
		<id name="id" type="java.lang.Integer">
			<column name="id" />
			<generator class="native" />
		</id>
		<property name="cardNo" type="java.lang.String">
			<column name="card_no" length="45" not-null="true" />
		</property>
		<!-- 
		指定多的一端的unique=true,这样就限制了多的一端的多重性为一   
                  通过这种手段映射一对一唯一外键关联 
        -->  
		<many-to-one name="person" column="person_id" unique="true" />  
	</class>
</hibernate-mapping>


增加与查询操作和结果都与共享主键方式中是一样的


目录
相关文章
|
SQL 分布式计算 资源调度
阿里云MaxCompute-Hive作业迁移语法兼容性踩坑记录
阿里云MaxCompute-Hive作业迁移语法兼容性踩坑记录
1742 0
|
11月前
|
消息中间件 运维 安全
C5GAME 游戏饰品交易平台借助 RocketMQ Serverless 保障千万级玩家流畅体验
游戏行业蓬勃发展,作为国内领先的 STEAM 游戏饰品交易的服务平台,看 C5GAME 如何利用 RocketMQ Serverless 技术,为千万级玩家提供流畅的游戏体验,同时降低成本并提升运维效率。
608 136
C5GAME 游戏饰品交易平台借助 RocketMQ Serverless 保障千万级玩家流畅体验
|
UED
解决Electron窗口白屏问题的预创建方案
在使用Electron创建窗口时,有时会遇到窗口显示白屏的问题。这篇文章将介绍一种解决方案,即预创建窗口,并提供了针对窗口关闭和应用退出的管理方法,以确保 Electron 应用的顺畅运行和用户体验
1081 0
|
9月前
|
存储 数据采集 数据库
Python爬虫实战:股票分时数据抓取与存储
Python爬虫实战:股票分时数据抓取与存储
【IntelliJ IDEA】idea 收起注释、打开注释、隐藏注释的快捷键
【IntelliJ IDEA】idea 收起注释、打开注释、隐藏注释的快捷键
1236 0
|
存储 缓存 负载均衡
数据库分库分表常见算法
数据库分库分表常见算法
【spark2.x】如何通过SparkSQL读取csv文件
【spark2.x】如何通过SparkSQL读取csv文件
399 0
|
关系型数据库 MySQL 数据安全/隐私保护
mysql8.0版本skip-grant-tables出现的新问题
mysql8.0版本skip-grant-tables出现的新问题MySQL 初始化 mysqld --initialize 的时候会有密码,就这个样子, 可是毕竟总有人跟我一样,不熟悉安装过程,没有注意这一密码这一项,导致你现在不知道密码的尴尬处境,或者说你是正常用了某一天脑子短路忘了密码, 那...
2906 0
|
SQL 存储 分布式计算
安装部署--hadoop、hive 配置修改&amp;impala 配置 | 学习笔记
快速学习 安装部署--hadoop、hive 配置修改&amp;impala 配置
867 0
安装部署--hadoop、hive 配置修改&amp;impala 配置 | 学习笔记
|
监控 关系型数据库 MySQL
Mysql-MHA集群(下)
Mysql-MHA集群(下)
239 0