hibernate——一对一映射(1)

Time-Interleaved Analog-to-Digital Converters   这篇论文提供了时间交错模数转换器的教程回顾。在解释了偏置、增益、定时和其他不匹配对变换器性能的影响后,给出了目前解决不匹配问题的方法。论文最后总结了时间交错模数转换器的现状。 1.简介   时间交错模数转换器(ADC)将多个子ADC组合成一个ADC系统,可以实现比单独的子ADC[1]更快的采样速率。历史上,时间交错adc的主要缺点是需要紧密匹配子adc[2]的特性。近年来,由于应用需要非常宽带信号的数字化、功率高效子adc的可用性以及由深亚微米互补金属氧化物硅(CMOS)技术实现的微调技术,使得时间交错 阅读详情

一对一映射本来以为挺简单的,但是一接触发现还是有些琢磨头的,但是理解之后,才会发现原来是挺简单的。

一对一映射关系,也有一个主表和从表的概念,例如人和身份证就是一对一的关系,如果将IdCard的主键设为Person的主键,那么Person为主表,而IdCard为从表,这样的映射关系决定了从表不能单独存在,必须依赖于一个主表。但是主表却可以单独存在,因为它不受从表的限制。并且得先有主表中的记录,才会对应的有从表中的记录。

下面举例说明:

建立Person和IdCard两个类:

package com.suo.domain;

public class Person {
	private int id;
	private String name;
	private IdCard idCard;
        
        ……//set/get方法
}
package com.suo.domain;

public class IdCard {
	private int id;
	private String No;
	private Person person;
        
        ……//set/get方法
}


然后就是两个类的映射文件:

Person.hbm.xml:
<hibernate-mapping package="com.suo.domain">
	
	<class name="Person">
		<id name="id">
			<generator class="native"/>
		</id>
		<property name="name"/>
		<one-to-one name="idCard"/>
		<!-- 这一句作用不大,只是和idCard建立起关联,在通过主表查询从表的时候起作用-->
	</class>
	
</hibernate-mapping>
IdCard.hbm.xml:
<hibernate-mapping package="com.suo.domain">
	
	<class name="IdCard" table="id_card">
		<id name="id">
			<generator class="foreign">
				<param name="property">person</param>
			</generator>
		</id>
		<property name="No"/>
		<one-to-one name="person" constrained="true"/>
		<!-- 这一句很关键,因为这里的主键和person的主键是相同的,所以要和person建立起关联,
			这也就是为什么这个表是从表的原因。constrained是添加约束,即将主键同时设置为外键-->
	</class>
	
</hibernate-mapping>
注意这两个映射文件的最后一个属性的配置,IdCard.hbm.xml中的person属性是一定要配的,因为还要通过这个属性找到主表中对应记录的主键,将它作为自己的主键,它建立起从表和主表的关联。而Person.hbm.xml中的idCard属性却不是一定要配的,不配的话,不会影响到IdCard记录的保存,也不会影响到它本身的保存,那么它什么时候起作用呢?就在于通过主表来查询从表的信息时起作用,若是不配这个属性的话,那么就没有建立起主表到从表的关联,是不能通过主表记录查询到从表相应的记录的(即使有getIdCard()和setIdCard()方法,也不会起作用,因为hibernate是根据映射文件来起作用的,没有配置的属性,就等于没有这个属性一样)。所以可以认为我们这里配置的是一个双向的关联,主表关联到从表,从表关联到主表。

下面再来说一下添加记录时的情况:

若是单单添加Person,那么很简单,因为它不受IdCard的限制,可以单独存在,这个就不多说了。关键是添加IdCard的记录时,就有些稍微复杂了。先看一个例子(添加的方法就不贴出来了):

public static void main(String args[]){
		
		Person person=new Person();
		person.setName("suo");
		
		IdCard idCard=new IdCard();
		idCard.setPerson(person);//相当于是设定主键,因为idCard的主键是person的外键。
		idCard.setNo("130427");
		
		add(idCard);
	}
注意,这里定义了一个Person对象,一个IdCard对象,然后只执行了一个add(idCard)方法,即没有去添加person,而是直接去添加身份证记录,会报错吗???答案是不会报错的。运行之后,先看一下执行的sql语句:

Hibernate: insert into Person (name) values (?)
Hibernate: insert into id_card (No, id) values (?, ?)

可以看到执行了两个插入语句,而且第一个是插入person的,第二个才插入idCard,我们并没有调用add(person)啊,怎么会输出插入person呢?这个我也不知道其中的内部机理,看源代码完全,也不知道哪里是哪里。可能是在setPerson的时候,发现这个person对象是处于瞬时状态,并且在设置主键的时候,要用到这个person对象的主键,那么只有先添加这个person对象的记录了。


所以,我们可以得到如下的结论:

若要添加一个身份证记录,如果person表中已经存在了和这个身份证对应的记录,那么设置好属性,直接插入即可;如果person表中还没有和这个身份证对应的记录,那么一定要先添加一个和这个身份证对应的person,然后再添加身份证记录,这个是必须的,即使你没有显示的去调用add(person),add(idCard)也会分两步执行,先添加person,后添加对应的身份证记录,但是前提必须是有一个person对象,不管是脱管的还是瞬时的,一定要有,否则身份证记录得不到主键,就会报错了。



R语言基于机器学习三分类结果、计算三分类混淆矩阵、计算每一个类别对应的特异度(specificity)、灵敏度(sensitivity)、PPV、NPV 阅读详情

相关推荐

【matlab】使用alexnet进行特征提取

1.下载alexnet工具箱 在命令栏输入alexnet,若不报错说明已经安装,若出现错误按照提示去下载工具箱; 下载地址:https://ww2.mathworks.cn/matlabcentral/fileexchange/59133-deep-learning-toolbox-model-for-alexnet-network (1)需要先注册(十分简单),登陆,下载; (2)下载完成之后,...

jingjingliang1995的博客 5846

Hibernate关联映射1:一对一主键关联

一对一关联包含2种类型:1,主键关联;2,唯一外键关联 1,主键关联: 2张关联表通过主键形成一对一映射关系,如一个人只能有一张身份证 CREATE TABLE `t_identity_card` ( `id` int(11) NOT NULL, `identity` int(11) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=Inno

怀揣梦想,努力前行 1万+

点击率预测的贝叶斯平滑

概述 电商领域中经常需要计算或预测一些转化率指标,如最典型的CTR(点击率,Click-Through Rate)。这些转化率可以是模型的预测值,也可以作为模型的特征(feature)使用。以商品点击率预测为例,CTR的值等于点击量(Click)除以曝光量(Impression或Exposure)。以rr表示点击率, r=CI(1)r=\frac{C}{I} \tag{1}. 但在实际应

小平子的专栏 3万+

Hibernate_映射_关联关系_一对一映射1__映射基础

辐_射的博客 477

人工智能机器学习从入门到高级学习资料(含资料下载地址)

机器学习是一个技术含量较高的领域,高效学习需要多种途径相结合.以下是一些推荐的学习资源。首先介绍几个比较有用的社区,包含了丰富的学习资料

2401_86900375的博客 1648

基于STM32与CAN总线的多电机协同控制系统设计与实现

本文详细介绍了基于STM32与CAN总线的多电机协同控制系统设计与实现。该系统采用分布式架构,通过CAN总线实现多节点通信,结合梯形加减速算法和同步控制策略,有效解决了工业自动化中多电机同步性差的问题。文章涵盖硬件设计、通信协议、抗干扰措施及实战调试经验,为工业应用提供高可靠性解决方案。

tech5的博客 970

1.Hibernate关联映射注解之一对一单向外键关联

关系映射级别注解: 1.一对一单向外键 2.一对一双向外键关联 3.一对一单向外键联合主键 4.多对一单向外键关联 5.一对多单向外键关联 6.一对多双向外键关联 7.多对多单向外键关联 8.多对多双向外键关联 实体之间的映射关系: 一对一:一个公民对应一个身份证号码。 一对多(多对一):一个公民有多个银行账号。 多对多:一个学生有多个老师,一个老师有多个学生。 1.Hi...

qq_39039017的博客 536

ATE自动化测试设备:硬件与软件的完美协同

本文深入解析了ATE自动化测试设备如何通过硬件与软件的完美协同,实现高效、精准的电子产品测试。文章详细阐述了ATE系统的硬件架构(如测试控制器、仪器模块、开关矩阵)与软件层次(如测试管理、仪器控制、数据分析),并结合实战案例,揭示了软硬件协同设计在提升测试效率与可靠性中的关键作用。

weixin_29218509的博客 168

Hibernate学习12 -- 关联映射2 -- 一对一关联1 -- 一对一主键关联

一对一关联表示两个对象之间是一对一的关系,如Person-IdCard。有两种策略可以实现一对一的关联映射:Ø 主键关联:即让两个对象具有相同的主键值,以表明它们之间的一一对应的关系;数据库表不会有额外的字段来维护它们之间的关系,仅通过表的主键来关联;Ø 唯一外键关联:外键关联,本来是用于多对一的配置,但是如果加上唯一的限制之后,也可以用来表示一对一关联关系;一对一主键关联映射:让两个

崇尚狼性的专栏 555

当兵心理测试软件,当兵心理测试题及答案

心理测试是一种比较先进的测试方法,它是指通过一系列手段,将人的某些心理特征数量化,来衡量个体心理因素水平和个体心理差异差异的一种科学测量方法。小编为你整理了当兵心理测试题及答案,希望对你有所参考帮助。征兵心理测试题(1代表是2代表否)1、我的胃口很好。12、我早上起来的时候,多半觉得睡眠充足,头脑清醒13、我喜欢看报纸上的犯罪新闻。14、有时我常感到困难重重,无法克服。25、我时常遇见一些所谓的专...

weixin_42128393的博客 1万+

超声波传感器(CHx01) 学习笔记 Ⅲ - I2C读写操作

CH-x01 通过 2 线 I2C 协议与主机处理器通信

nicole088的专栏 1738

1.hibernate一对一的关系映射

一对一的两种配置 l 共享主键方式 create table tb_person( id integer primary key , name varchar2( 60 ) not null, birthday date , email varchar2( 60 ) not null, p...

weixin_30730151的博客 63

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Hibernate关系映射学习点滴1:一对一关系映射

1. 一对一关系映射

gladmustang的专栏 656

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

8.1 Hibernate:一对一关联映射

8.1 Hibernate:一对一关联映射

又言又语 438

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Hibernate关系映射(1)_一对一单向外键关联

 一.Annotation方式:    在Husband.java中持有Wife的引用,Wife.java中没有Husband的引用(单向外键关联)/* * Hunsband.java */ @Entity public class Husband { private int id; private String name; private Wife wife; @Id @GeneratedValue public int getId() { return i

sunyao1000的专栏 512

Hibernate之基于外键映射的一对一(1-1)关联关系

1.对于基于外键的1-1关联,其外键可以存放在任意一边,在需要存放外键一端,增加many-to-one元素。为many-to-one元素增加unique=“true”属性来表示为1-1关联 2.另一端需要使用one-to-one元素,该元素使用property-ref属性指定使用被关联实体主键以外的字段作为关联字段 <one-to-one n

无羁之风的专栏 1687

Java 数据 02:Hibernate 关联映射(一对一 / 一对多 / 多对多)

摘要: 本文深入讲解Hibernate中的三种关联映射方式:一对一、一对多/多对一和多对多关系。通过Java实体类代码示例、数据库表结构设计和Hibernate注解配置,详细演示了如何在ORM框架中实现对象间的复杂关系映射。文章包含CRUD操作实例、性能优化建议和常见陷阱,基于Hibernate 5.6+和JPA 2.2标准编写,适用于MySQL等多种数据库。从项目搭建到实际应用,帮助开发者掌握通过注解配置对象关系映射的核心技术,提升数据库操作效率。

千淘万漉虽辛苦,吹尽狂沙始到金 2万+

Hibernate 一对一外键单向关联

事实上,单向1-1与N-1的实质是相同的,1-1是N-1的特例,单向1-1与N-1的映射配置也非常相似。只需要将原来的many-to-one元素增加unique="true"属性,用于表示N的一端也必须是唯一的,在N的一端增加了唯一的约束,即成为单向1-1。基于外键的单向1-1的配置将与无连接表N-1关联的many-to-one增加unique="true"属性即可。 一、模型介绍 一...

weixin_30802273的博客 80

Hibernate一对一关联------外键关联(亲测成功)

1、创建实体(Address.java、Address1.java、Client.java) 1 package wck.stu.vo.onetooneout; 2 3 public class Address { 4 private String id = ""; //主键 5 6 private String province = "...

weixin_30734435的博客 105

《Hibernate上课笔记》-----class5----Hibernate实现一对一关联映射

目录一:一对一关联映射1.主键关联映射实现1.1使用xml方式实现1.2使用注解的方式实现2.唯一外键关联映射实现2.1使用xml方式实现2.2使用注解的方式实现 一:一对一关联映射 现实生活中事物内部以及事物之间的联系在信息世界中反映为实体内部的联系与实体之间的联系。例如一对一联系,一对多联系,多对多联系。那么我们怎么把这样的关系映射到数据库上呢? 一对一联系(1:1)定义: 如果对于实体集A中的每一个实体,实体集B中至多有一个(也可以没有)实体与之联系,反之亦然,则称实体集A与实体集B具有一对一联系

池鱼 2976

单项一对一

Hibernate 一对一外键单向关联       事实上,单向1-1与N-1的实质是相同的,1-1是N-1的特例,单向1-1与N-1的映射配置也非常相似。只需要将原来的many-to-one元素增加unique="true"属性,用于表示N的一端也必须是唯一的,在N的一端增加了唯一的约束,即成为单向1-1。基于外键的单向1-1的配置将与无连接表N-1关联的many-to-one增加uniqu...

weixin_33713503的博客 91

Hibernate 一对一连接表单向关联

这种情况很少见,但Hibernate同样允许采用连接表关联1-1.有连接表的1-1同样只需要将N-1的many-to-one元素增加unique="true"属性即可。   一、模型介绍   一个人(Person)对应一个地址(Address)。   二、实体(省略getter、setter

zhll3377的专栏 432
上一篇: hibernate——多对一和一对多映射浅析
下一篇: hibernate——多对多映射
hackerain
博客等级 码龄16年 753粉丝 220原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值