Hibernate关系映射之关联映射

本文详细介绍了Hibernate框架中各种关联映射的方式,包括多对一、一对一、一对多及多对多关联映射的实现原理与配置方法,并通过具体示例进行说明。

Hibernate关系映射

1.关联映射

概念:关联映射,就是将关联关系映射到数据库中,所谓的关联关系,在对象模型中,就是一个或多个引用

分类:

1)多对一关联映射

         many-to-one

         多对一关联映射原理:在多的一端加入一个外键,指向一的一端

         在多的一端采用如下标签映射:

	<many-to-one name="group" column="groupId"/>
2)一对一关联映射

         one-to-one

         A主键关联:即让两个对象具有相同的主键值,以表明它们之间的一一对应的关系;数据库表不会有额外的字段来维护它们之间的关系,仅通过表的主键来关联

示例1:

hibernate一对一主键关联映射(单向关联Person--->IdCard)

一对一关联映射原理:让两个实体的主键一样,这样就不需要加入多余的字段了(扩展性不好)

	<class name="com.ys.hibernate.Person" table="t_person">
		<id name="id">
		    <!-- 采用foreign生成策略,会取得关联对象的标识 -->
			<generator class="foreign">
			    <!-- property指关联对象 -->
			    <param name="property">idCard</param>
			</generator>		    
		</id>
		<property name="name" />
		<!-- 
			one-to-one指示hibernate如何加载其关联对象,默认根据主键加载
			也就是拿到关系字段值,根据对端的主键来加载关联对象
			
			constrained="true"表示,当前主键(Person的主键)还是一个外键
			参照了对端的主键(IdCard的主键),也就是会生成外键约束语句
		 -->
		<one-to-one name="idCard" constrained="true" />
	</class>

 示例2:

hibernate一对一主键关联映射(双向关联Person<--->IdCard)

需要在IdCard加入<one-to-one>标签,

指示hibernate将关联对象Person根据主键加载上来

<one-to-one>不影响存储,只影响加载

<one-to-one>标签fetch属性默认为"join"

 

         B唯一外键关联:外键关联,本来是用于多对一的配置,但是如果加上唯一的限制之后,也可以用来表示一对一关联关系

示例1:

hibernate一对一唯一外键关联映射(单向关联Person--->IdCard)

一对一唯一外键关联映射,其实是多对一的特例

采用<many-to-one>标签来映射,指定多的一端uniquetrue,

这样就限制了多的一端的多重性为一,就是这样来映射的

	<many-to-one name="idCard" unique="true"/>

 示例2:

hibernate一对一唯一外键关联映射(双向关联Person<--->IdCard)

一对一唯一外键关联双向,采用<one-to-one>标签映射,

必须指定<one-to-one>标签中的property-ref属性为关系字段的名称

	<one-to-one name="person" property-ref="idCard"/>
3)一对多关联映射

         one-to-many

 示例1:

hibernate一对多关联映射(单向Classes--->Student)

一对多和多对一的映射原理是一样的,都是在多的一端加入一个外键指向一的一端

 

它们的区别在于维护的关系不同:

         *多对一维护的关系:多指向一的关系,如果维护了多指向一的关系,那么加载多的时候会把一加载上来

         *一对多维护的关系:一指向多的关系,如果维护了一指向多的关系,那么加载一的时候会把多加载上来

        

在一的一端维护关系存在缺陷:

         *因为多的一端Student不知道Classes的存在(也就是Student没有维护与Classes的关系)

         所以在保存Student的时候关系字段classesId是为null,如果将该字段设置为非空,则将无法保存数据

         *另外因为Student不维护关系,Classes维护关系,Classes就会发出多余的update语句,保证ClassesStudent有关系,这样加载Classes的时候才能把该Classes对应的学生集合加载上

		<set name="students">
		    <!-- 
		    <key column="classesId" not-null="true"/>--保存不成功
		     -->
		    <key column="classesId" />--会发出多余的update语句来维持关系
		    <one-to-many class="com.ys.hibernate.Student" />
		</set>

 示例2:

hibernate一对多关联映射(双向Classes<--->Student)

采用一对多双向关联映射的目的主要是为了解决一对多单向关联的缺陷

而不是需求驱动的

 

一对多双向关联的映射方式:

         *在一的一端的集合上采用<key>标签,在多的一端加入一个外键

         *在多的一端采用<many-to-one>标签

	<many-to-one name="classes" column="classesId" />

!!!注意:

         <key>标签和<many-to-one>标签加入的字段保持一致,否则会产生数据混乱

4)多对多关联映射

         many-to-many

 示例1:

hibernate多对多关联映射(单向User--->Role)

具体映射:

		<set name="roles" table="t_user_role">
		    <key column="user_id" />
		    <many-to-many class="com.ys.hibernate.Role" column="role_id" />
		</set>

把第三张表也抽取出一个类出来,使用两个many-to-one来完成

示例2:

hibernate多对多关联映射(双向User<--->Role)

具体映射:

		<set name="roles" table="t_user_role">
		    <key column="user_id" />
		    <many-to-many class="com.ys.hibernate.Role" column="role_id" />
		</set>

需要注意:

         *生成的中间表名称必须一样

         *生成的中间表中的字段必须一样

 

2.继承映射

3.复合主键映射

4.组件映射

5.集合映射

6.其他

 

下载代码方式:https://pan.quark.cn/s/a4b39357ea24 HTML大屏展示模板是一种用于设计具有视觉冲击力且内容充实的巨型显示屏应用的设计方案,其应用范围广泛,涵盖了数据分析、监控以及决策支持等多个领域。这些模板通常整合了HTML、CSS、JavaScript等多种技术,尤其借助ECharts等数据可视化工具以达成复杂数据的图形化呈现。以下是对相关技术细节的深入说明: 1. **可视化**:数据可视化是将抽象的数据转化为直观的图像或图表的技术手段。这种技术有助于迅速识别数据中的模式、发展趋势和异常情况,使得非专业背景的人员也能轻松理解复杂的数据信息。在大屏展示场景中,可视化通常包含折线图、柱状图、饼图、热力图、地图等多种图表形式。 2. **大数据**:大数据指的是规模庞大、增长迅速、种类多样且数据密度较低的数据集合。在HTML大屏展示中,大数据的应用旨在支持实时或近乎实时的决策制定,例如监控销售业绩、交通流量、能源消耗等关键性能指标。 3. **HTML**:超文本标记语言(HTML)构成了网页内容的基础结构,用于界定页面的布局和元素。在大屏展示模板中,HTML负责构建页面组件,例如标题、段落、图像以及图表容器等。 4. **CSS**:层叠样式表(CSS)用于调控网页的视觉风格和布局结构。在大屏模板设计中,CSS扮演着核心角色,确保设计的响应性、适应性和美观度,包括设定颜色、字体、间距、动画效果等。 5. **ECharts**:ECharts是由百度研发的一款开源JavaScript数据可视化库,能够支持多种图表类型,如折线图、柱状图、散点图等,并提供了丰富的交互特性。在大屏展示中,ECharts能够助力生成动态且交互式的数据...
内容概要:本文提出了一种基于递进事件触发框架的孤岛微电网DoS攻击容错二次协同控制方法,旨在解决通信资源受限与网络安全威胁耦合下的控制难题。该方法通过设计递进式事件触发机制,在保障系统动态性能的同时显著降低通信频率,减轻网络负载,并有效抵御拒绝服务(DoS)攻击对控制链路的干扰。结合二次协同控制策略,实现了在攻击发生时对微电网频率与电压的精准恢复,同时确保各分布式电源间的功率精确分配与电能质量稳定。通过Simulink搭建的仿真模型验证了该方法在不同攻击强度和通信约束条件下的有效性、鲁棒性与容错能力。; 适合人群:从事电力系统自动化、微电网控制、分布式能源系统、网络物理系统安全及智能电网弹性控制研究的研究生、科研人员和工程技术人员。; 使用场景及目标:①研究孤岛微电网在面临DoS攻击时的弹性控制与容错机制;②设计具有高通信效率和强安全韧性的能源互联网控制系统;③实现微电网二次控制中通信资源优化、控制性能提升与网络安全防护的多目标协同。; 阅读建议:此资源侧重于控制算法的理论设计与仿真验证,建议读者结合Simulink模型深入理解递进事件触发机制与协同控制策略的实现逻辑,重点关注系统在不同攻击场景下的动态响应特性与稳定性表现,以全面掌握其容错性能与工程应用潜力。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值