hibernate之Collection类型

 

  • Collection类型:

 

在Hibenrate中的一对多,多对多关系中,Collection占着比较重要的地位;在Hibernate中支持几种类型的Collection?他们之间的差异何在?

在Hibernate中涉及的Collection类型(传统的java Set,Map,List实现不能满足要求,Hibernate根据这些接口提供了自己的实现,下面的Set,Bag,Map均指的是HIbernate中的实现)有:

1,无序集合:Set,Bag,Map;

2,有序结合:List;

无序和有序,是针对HIbenate数据持久过程中的,是否保持数据集合中的记录排列顺序加以区分的;有序集的数据集合,HIbernate在持久化过程中,会将集合中元素排序的先后顺序同时固化到数据库中(以某个特定的字段值储存顺序),当读取时,也会返回一个具备同样个排列顺序的数据集合;

 

  • set

 

HIbernate Set遵循java Collection中关于Set的定义,即集合中不允许出现两个相同元素;

 

TUser user = new TUser();
user.setName("keith");
set.add(user);
set.add(user);
System.out.println("user size:"+user.size());

 

 虽然执行了两次add()操作,但是Set结构中只包含了一个引用;

Hibernate在返回关联对象集合的时候,会自动为每个记录构建一个实体对象;如:TUser对象中有 Set<Book> books属性;在添加的时候添加了5本Book;那么hibernate就会构造出5个Book对象,放在TUser的Set<Book> books集合中返回,即使这5个book记录的逻辑内容完全相同(id不同);这是通过实体对象进行映射,如果通过String对book表中的字段进行映射,就会出现问题。将映射的类型改为String(原来为com.keith.Book);那么hibernate就会只构造出一条记录进行返回(因为java.lang.String会比较两个字符串的内容,如果这样比较的话5个book内容是一样的,那么Set中又不允许出现同样的值,这样的话就会保存1条记录);添加湿这样,那么删除也会出现相同的错误;

为了补充Set数据类型在这方面的限制,HIbernate提供了Bag类型;

 

  • Bag
Bag:是Hibernate自定义的集合类型,实现了一个允许包含重复元素的“set”;它的底层是接触了list实现,却屏蔽了List的有序性,通过“bag”声明的数据集合,其元素排序顺序不会被持久化;
当我们将<set>替换成<bag>时;即使加入了相同的book,也会往数据库里添加了3条记录;
bag集合为无序集合,且允许出现重复元素,也会带来问题,当删除某个元素的时候,我们该如何定位这条记录?因为数据库里存在多条相同的元素,bag的实现方式,实际上是先将库表中原有的集合数据全部删除,再将现有的数据逐条插入,但是这种方式的数据更新的性能很低;对于这样的情况,如果集合中的每个元素都有一个id可以唯一检索到对应的数据库记录。
那么出现了idBag,作为bag的一种延伸,则可以解决这个问题;
		<idbag name="books" lazy="true" table="_books"> 
			<collection-id type="int" column="id">
				<generator class="identy"></generator>
			</collection-id>
			<key column="user_id" />
			<element type="string" column="books"/>
		</idbag>
 更详细的可查看hibernate官方文档;
  • Map
Map也是一个无序集合类型,与Set/Bag类型不同的是,Map提供了值/键对应关系;一个Map配置例子如下:
		<map name="books" lazy="true" table="_books">
			<key column="user_id"/>
			<index type="string" column="type"/>
			<element type="string" column="books"/>
		</map>
 与set配置相比,Map增加了一个<index>配置,用于指定用作Key的字段名,此字段要求在数据集中取值唯一;
  • List
List实现了集合内元素顺序的持久化,与Map集合需要额外字段保存键值一样,它要求库必须配属对应的字段以保存次序的信息;一个List配置例子如下:
		<list name="books" lazy="true" table="_books">
			<key column="user_id"/>
			<index type="integer" column="idx"/>
			<element type="string" column="books"/>
		</list>
 <index />节点中,我们指定以“idx”字段保存次序状态;

 

element的el-cascader组件动态加载,以及报错处理问题 Blocked aria-hidden on an element because its descendant retained focus. The focus must not be hidden from assistive technology users. 报错处理 阅读详情

相关推荐

QCM6490平台DDR测试:从QDUTT配置到眼图分析的实战指南

本文详细介绍了QCM6490平台DDR测试的全流程,从QDUTT工具安装配置到眼图分析,提供了实战操作指南和常见问题解决方案。通过具体案例分享,帮助工程师掌握DDR测试技巧,确保内存稳定性,特别适用于物联网和边缘计算设备的开发调试。

weixin_33910191的博客 458

NHibernate集合映射中的set, list, map, bag, array

set, bag, list, map的语义 集合最重要的一点是集合的语义。Java JPA中对Set, List, Collection, Map四种集合进行了定义(Java的Collection允许bag语义),NHibernate从Hibernate移植时照搬了这些概念。但是.Net社区中这些概念比较弱,很多人对set, bag, map的说法很陌生,这也对NHibernate集合映射的使...

weixin_33932129的博客 194

【win10+RAGFlow+Ollama】搭建本地大模型助手(教程+源码)

在当今科技飞速发展的时代,人工智能(AI)已经成为各行各业不可或缺的一部分。特别是在文档处理和数据分析领域,AI的应用更是无处不在。今天,我要向大家介绍一个开源的AI框架引擎——RAGflow。它能够在深度文档理解方面执行检索增强生成(Retrieval-Augmented Generation,简称RAG),并且被认为是目前最优秀的RAG框架之一。本文将详细探讨RAGflow的创新功能、技术特点以及如何在实际应用中发挥其最大潜力。

Yooao的博客 9618

hibernate的collections介绍

在Hibernate下,实体类将collection作为自己的一个逻辑单元,而不是被容纳的多个实体。这非常重要!它主要体现为以下几点: 当删除或增加collection中对象的时候,拥有这个collection的实体对象的版本值会递增。 如果一个从collection中移除的对象是一个值类型(value type)的实例,比如co

cchheennhhaaoo119的专栏 845

硬件原理图分析

文章目录1 硬件原理图分析1.1 MCU部分1.2 NB部分1.3 电源部分 1 硬件原理图分析 1.1 MCU部分 MCU接口部分没啥需要注意,都是常规操作。 1.2 NB部分 U4是用来防静电的。 由于NB的以上几个引脚只支持1.8V,所以这里需要3.3V转1.8V的电路。只要把握住谁改变电平就好分析是怎么实现电平转换的了。 1.3 电源部分 图中的MOS是用来实现USB和电池同时插入时只能USB供电功能的。 ...

木子皿--啥都不会的菜鸟 8170

知识图谱设计简记

知识图谱是一种语义化的知识表示框架,通过实体-关系-属性三元组形式表达现实世界关联。其核心价值在于关联化整合数据、支持可解释性推理和赋能智能化应用。知识图谱可分为通用型和领域型两类,基本构成包括实体、关系、属性等基础元素,以及本体和实例等架构层元素。设计方法主要有自上而下、自下而上和混合式三种,需遵循业务导向、一致性等原则。在建模时需要明确属性与实体的判断标准,规范处理关系的方向性与对称性,并合理构建多重关系。主流技术框架如RDF和属性图体系均支持多重关系建模,选择需考虑业务需求。本体作为知识图谱的概念骨架

生活在别处 360

hibernate参考手册之---集合类(Collections)映射

 第 6 章 集合类(Collections)映射6.1. 持久化集合类(Persistent Collections)(译者注:在阅读本章的时候,以后整个手册的阅读过程中,我们都会面临一个名词方面的问题,那就是“集合”。"Collections"和"Set"在中文里对应都被翻译为“集合”,但是他们的含义很不一样。Collections是一个超集

yangxn的专栏 834

Unity之OpenXR+XR Interaction Toolkit实现 VR控制第一人称角色模型动画

我们在开发VR项目时,有时会有第一人称视角的需求,即我们自己带上VR头显,能够看到自己的身体,如果模拟一些人物触电死亡,使用工具动画之类的需求,那么VR控制第一人称视角就比较实用了。我们今天就来介绍一下如何实现VR设备控制第一人称:1.角色手部跟随手柄移动和旋转2.角色头部跟随VR头显转动和移动3.角色腿部跟随角色头显移动和下蹲。

TxNet 2844

3.1Hibernate-Collection

1、作用在List上的@OrderColumn和@OrderBy区别 如果想要保持存入顺序与取出顺序,则需要使用。 参考:https://stackoverflow.com/questions/11433195/hibernate-orderby-vs-ordercolumn-to-maintain-the-order-of-a-collection @OrderBy使用类中的子实体

ack_Finding的博客 419

Python爬虫实战:全自动采集银行理财产品收益率数据

本文通过Playwright动态爬虫技术,成功实现了对银行理财产品收益率数据的实时采集,并通过 Pandas 数据清洗、SQLite 存储、调度自动化等模块,构建了一个可扩展的银行理财数据抓取系统。理财非儿戏,数据做决策。掌握银行收益信息是我们迈向理性投资的第一步。希望这套工具对你有所帮助!

2201_76125261的博客 1155

85-Halcon-- gen_cam_par_area_scan_division 函数功能(生成面阵相机镜头参数)

Halcon的gen_cam_par_area_scan_division算子用于生成面阵相机的镜头参数,支持除法畸变模型。该算子输出包含9个参数的元组,包括焦距(Focus)、畸变系数(Kappa)、像素尺寸(Sx,Sy)、主点坐标(Cx,Cy)和图像尺寸。文中详细解析了各参数含义、数学原理(包括畸变矫正公式和坐标转换),并提供了三个工业应用案例:高精度芯片尺寸测量、机器人焊接引导和大视野汽车表面检测。最后给出了完整的相机标定流程,涵盖参数生成、畸变校正和标定配置步骤,适用于工业视觉系统的精确标定需求。

weixin_45590420的博客 915

Hibernate深入浅出(十)Collection&结果集排序

Hibernate的一对多,多对多映射关系。其中,Collection扮演着数据容器的重要角色。Hibernate中涉及的Collection类型共有以下几种:无序集:Set, Bag, Map有序集:List由于传统的Java Set、Map、List实现不能满足要求,Hibernate根据这些接口提供了自己的实现。这里所说的Set、Map和List,均指Hibernate...

weixin_33913377的博客 162

SAP_SD模块 物料科目分配/成本简介

路径:SPRO—销售与分销—基本功能—科目分配/成本—收入账户确定—收入科目确定相关性—定义并分配科目代码—定义科目代码。路径:SPRO—销售与分销—基本功能—科目分配/成本—收入账户确定—收入科目确定相关性—定义访问顺序和科目确定类型。路径:SPRO—销售与分销—基本功能—科目分配/成本—收入账户确定—收入科目确定相关性—定义并分配科目确定过程。文本主要说明销售模块中的科目分配和成本的一个对应关系。SPRO—销售与分销—基本功能—科目分配/成本—收入账户确定—检查科目分配的相关主数据。

我小时候很黑的博客 2618

java 两个 hibernate 对象 list 比较 不同的,hibernate之Collection类型

Collection类型:在Hibenrate中的一对多,多对多关系中,Collection占着比较重要的地位;在Hibernate中支持几种类型的Collection?他们之间的差异何在?在Hibernate中涉及的Collection类型(传统的java Set,Map,List实现不能满足要求,Hibernate根据这些接口提供了自己的实现,下面的Set,Bag,Map均指的是HIberna...

weixin_32200329的博客 155

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

正确理解Hibernate的聚合类型(collection)的使用【转】

关系数据库系统本身就比较复杂,加上Hibernate的O/R映射层,复杂度加重了,很容易出现问题,本人将最近遇到的问题和解决方法做一个总结,整理在下面的一系列文章中 正确理解Hibernate的聚合类型(collection)的使用 在Hibernate中正确实现关联关系中的级联操作(cascading)在Hibernate框架中编写持久对象类实现外键关联的几点注意事项使用Hibernate

zlbvs24的专栏 838

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

org.hibernate.MappingException: Could not determine type for: java.util.Collection, for columns: [org.hibernate.mapping.Column(l

org.hibernate.MappingException: Could not determine type for: java.util.Collection, for columns: [org.hibernate.mapping.Column(lineItems)]错误解决方案         近日在运行一个EJB3 Entity实例(一对多关系)时总遇到如下异常,久试不能修

叶现一的专栏 3593

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

org.hibernate.LazyInitializationException

不要统计Collection类型的字段的hashCode就可以解決問題:org.hibernate.LazyInitializationException: illegal access to loading collection,

Kevin的足跡 214

Hibernate 集合属性的操作

Hibernate对集合属性的操作 Set集合属性的操作 Set结合接口的配置 在*.hbm.xml文件中使用标签 元素用来映射java.util.Set类型的属性,常见的属性和子元素有: name属性 table属性 子元素 子元素 实例: entity/StudentSet.java package entity; import java.io.Seri

minihoop的博客 380

hibernate BeanCreationException 解决方案

错误如下:org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/Hiberna

张相逢的博客 1756

Hibernate映射集合(JDK以及嵌入式值类)

JDK内置的集合类型有Set、List、Collection、Map四种 //Set与Collection的区别在于是否允许重复元素,java未提供Collection的实现。 //任意的值类型集合映,都需要@ElementCollection,其有两个属性fetch以及targetClass,其中targetClass在集合不是泛型集合时是必须指定的。 //通过@Collectio...

dengluan0964的博客 164

Hibernate中配置集合映射(2)

a651944226的专栏 850

Hibernate学习笔记7

  Hibernate学习笔记7学习课程:Component映射——组建映射Hibernate_15_Compontent_MappingComposite映射——复合主键映射Hibernate_16_Composite_MappingCollection映射——集合映射Hibernate_17_Collection_

风达的专栏 1226

hibernate中的集合类标签

  List是一个有序集合,所以当其生成简单表的时候,需要指定其下标(通过list-index标签),并且需要指定其表的名字。List所对应的表中以一个外键和下标作为联合主键。 一个简单的例子,list中存储的是简单的数据类型: 建立表的时候用的SQL语句: //移除外键关系,防止删除的时候禁止删除 alter table children drop foreign key FK62E...

326

org.hibernate.MappingException: Could not determine type for: java.util.Collection, for columns: [or...

org.hibernate.MappingException: Could not determine type for: java.util.Collection, for columns: [org.hibernate.mapping.Column(lineItems)] 错误解决方案 近日在运行一个EJB3 Entity实例(一对多关系)时总遇到如下异常,久试不...

weixin_30875157的博客 149

Hibernate 多对一的 实现

在一对多的问题中遇到Exception 如下: [code="java"]org.hibernate.exception.SQLGrammarException: could not initialize a collection[/code] Department 如下: [code="java"] package com.domain; import java.util.Set;...

myharmony的专栏 140

hibernate 中的bag

Bag是集合,与Set不同的是,Bag允许重复的元素, 在Java的标准API中并没有提供Bag容器,Hibernate提供自己的Bag实现,允许您将List映射为Bag。 您可以如下定义User类别,其中的List成员将被用作Bag来使用,而不管物件在List容器中的顺序: User.java package onlyfun.caterpillar; import java.uti...

z130532的博客 259
上一篇: Hibernate之海量数据操作
下一篇: hibernate之结果集排序
keithJava
博客等级 码龄16年 2粉丝 41原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值