Hibernate 集合的加载形式

微信小程序-如何根据缩放屏幕大小自适应icon图标更改marker 微信小程序如何根据用户的缩放屏幕来改变marker图标icon的大小,实现icon自适应屏幕缩放的效果 阅读详情
 
Hibernate最让人头大的就是对集合的加载形式。
书看了N次了,还是没有真正理解Hibernate。所以下午专门做了下测试,对配置文件的意思加深了认识。

假设有两个表,Photos(一) --- picture(多)Photo包含picture集合
结论1:HQL代码 > fetch(配置) > lazy (配置);
结论2:默认 lazy="true";
结论3:fetch 和 lazy 主要是用来级联查询的,而 cascade 和 inverse 主要是用来级联插入和修改的;
结论4:如果你是用spring来帮你管理你的session,并且是自动提交,延迟加载就等于没加载~_~(当然除非你手动重新打开session,然后手动Hibernate.initialize(set),然后关闭session);
结论5:cascade主要是简化了在代码中的级联更新和删除;
结论6:老爸可以有多个孩子,一个孩子不能有多个老爸,而且老爸说的算, 孩子围着老爸转。

所以Photos老爸要有权力所以 cascade 这个关键子都是送给老爸的,也就是级联更新,老爸改姓了,儿子也得跟着改,呵呵。“不然,就没有零花钱咯”。
而Picture儿子整体挨骂,但是还是要维护父子之间良好的关系,对老爸百依百顺,所以老爸就说,儿子,“关系,由你来维护(inverse="true") ,不然就不给零花钱。呵。”。

<set name="pictures" inverse="true" cascade="all">
<key>
<column name="photosid" not-null="true" />
</key>
<one-to-many class="girl.domain.Picture" />
</set>

测试代码:
Photos p = ps.getById(1);
Set<Picture> set = p.getPictures();
for(Picture pic : set){
System.out.println(pic.getId());
}

配置文件的一部分:
<set name="pictures" inverse="true" cascade="all" >
<key>
<column name="photosid" not-null="true" />
</key>
<one-to-many class="girl.domain.Picture" />
</set>

测试过程会对配置文件不断修改:并且从来不曾手动重新打开session
测试结果:
1.当配置条件为 lazy=true 一句查询 测试代码中没有调用getPictures() 正常
Hibernate: select photos0_.id as id0_0_, photos0_.userid as userid0_0_, photos0_.typeid as typeid0_0_, photos0_.name as name0_0_, photos0_.createtime as createtime0_0_, photos0_.description as descript6_0_0_, photos0_.faceid as faceid0_0_, photos0_.uri as uri0_0_ from super.photos photos0_ where photos0_.id=?

2.lazy=true 一句查询 有getPictures()
Hibernate: select photos0_.id as id0_0_, photos0_.userid as userid0_0_, photos0_.typeid as typeid0_0_, photos0_.name as name0_0_, photos0_.createtime as createtime0_0_, photos0_.description as descript6_0_0_, photos0_.faceid as faceid0_0_, photos0_.uri as uri0_0_ from super.photos photos0_ where photos0_.id=?

3.lazy=true 一句查询 有getPictures() 并且访问了里面的元数Picture 且有异常抛出
Hibernate: select photos0_.id as id0_0_, photos0_.userid as userid0_0_, photos0_.typeid as typeid0_0_, photos0_.name as name0_0_, photos0_.createtime as createtime0_0_, photos0_.description as descript6_0_0_, photos0_.faceid as faceid0_0_, photos0_.uri as uri0_0_ from super.photos photos0_ where photos0_.id=?

4.lazy="false" 两句查询 肯定没问题,因为全部数据都个查了出来 所以怎么调用都正常
Hibernate: select photos0_.id as id0_0_, photos0_.userid as userid0_0_, photos0_.typeid as typeid0_0_, photos0_.name as name0_0_, photos0_.createtime as createtime0_0_, photos0_.description as descript6_0_0_, photos0_.faceid as faceid0_0_, photos0_.uri as uri0_0_ from super.photos photos0_ where photos0_.id=?

Hibernate: select pictures0_.photosid as photosid1_, pictures0_.id as id1_, pictures0_.id as id2_0_, pictures0_.photosid as photosid2_0_, pictures0_.name as name2_0_, pictures0_.clicked as clicked2_0_, pictures0_.uploaddate as uploaddate2_0_, pictures0_.size as size2_0_, pictures0_.description as descript7_2_0_, pictures0_.uri as uri2_0_ from super.picture pictures0_ where pictures0_.photosid=?

5.fetch="join" 一句查询 效果 == lazy="false" 呵呵,哪个效率高,我就不知道了。。。。。。。。。。。
Hibernate: select photos0_.id as id0_1_, photos0_.userid as userid0_1_, photos0_.typeid as typeid0_1_, photos0_.name as name0_1_, photos0_.createtime as createtime0_1_, photos0_.description as descript6_0_1_, photos0_.faceid as faceid0_1_, photos0_.uri as uri0_1_, pictures1_.photosid as photosid3_, pictures1_.id as id3_, pictures1_.id as id2_0_, pictures1_.photosid as photosid2_0_, pictures1_.name as name2_0_, pictures1_.clicked as clicked2_0_, pictures1_.uploaddate as uploaddate2_0_, pictures1_.size as size2_0_, pictures1_.description as descript7_2_0_, pictures1_.uri as uri2_0_ from super.photos photos0_ left outer join super.picture pictures1_ on photos0_.id=pictures1_.photosid where photos0_.id=?

6.不加fetch="join" 一句查询 没有getPicture() 正常
Hibernate: select photos0_.id as id0_0_, photos0_.userid as userid0_0_, photos0_.typeid as typeid0_0_, photos0_.name as name0_0_, photos0_.createtime as createtime0_0_, photos0_.description as descript6_0_0_, photos0_.faceid as faceid0_0_, photos0_.uri as uri0_0_ from super.photos photos0_ where photos0_.id=?

7.不加fetch="join" 一句查询 有getPicture() 正常
Hibernate: select photos0_.id as id0_0_, photos0_.userid as userid0_0_, photos0_.typeid as typeid0_0_, photos0_.name as name0_0_, photos0_.createtime as createtime0_0_, photos0_.description as descript6_0_0_, photos0_.faceid as faceid0_0_, photos0_.uri as uri0_0_ from super.photos photos0_ where photos0_.id=?

8.不加fetch="join" 一句查询 有getPicture() 并且访问里面的元素Picture的ID 有异常抛出
Hibernate: select photos0_.id as id0_0_, photos0_.userid as userid0_0_, photos0_.typeid as typeid0_0_, photos0_.name as name0_0_, photos0_.createtime as createtime0_0_, photos0_.description as descript6_0_0_, photos0_.faceid as faceid0_0_, photos0_.uri as uri0_0_ from super.photos photos0_ where photos0_.id=?

9.来个两兵交战 fetch="join" lazy="true" 呵呵 结果,一句查询, 结果正常 所以就当lazy不存在好了。 看来fetch 是老大。、、、、、、、、、、、、、
Hibernate: select photos0_.id as id0_1_, photos0_.userid as userid0_1_, photos0_.typeid as typeid0_1_, photos0_.name as name0_1_, photos0_.createtime as createtime0_1_, photos0_.description as descript6_0_1_, photos0_.faceid as faceid0_1_, photos0_.uri as uri0_1_, pictures1_.photosid as photosid3_, pictures1_.id as id3_, pictures1_.id as id2_0_, pictures1_.photosid as photosid2_0_, pictures1_.name as name2_0_, pictures1_.clicked as clicked2_0_, pictures1_.uploaddate as uploaddate2_0_, pictures1_.size as size2_0_, pictures1_.description as descript7_2_0_, pictures1_.uri as uri2_0_ from super.photos photos0_ left outer join super.picture pictures1_ on photos0_.id=pictures1_.photosid where photos0_.id=?
11种图像清晰度评价函数附MATLAB代码 博主的第一篇博客! 本科毕业论文是“基于图像处理的自动对焦技术研究”,对焦过程中的一个重要阶段是图像清晰度评价,博主自己用MATLAB实现了4类清晰度评价函数:基于图像梯度的清晰度评价函数、频域评价函数、信息熵评价函数、统计学评价函数,总计11种。博主之前没有用过MATLAB,完全是本科论文需要,没办法对着别人的代... 阅读详情

相关推荐

海康SDK实战:如何从PS流中提取H264裸流并实现前端播放(附完整代码)

本文详细介绍了如何利用海康SDK从PS流中提取H264裸流,并构建无插件前端播放的完整链路。通过解析PS流结构、提取H264 ES流,结合WebSocket实时传输与WFS.js前端播放器,实现了低延迟、高可控性的视频流处理方案,为开发者提供了从数据源到前端渲染的实战代码与清晰指南。

weixin_29051811的博客 476

Hibernate: select roles0_.ADMIN_ID as ADMIN2_1_, roles0_.ROLE_ID as ROLE1_1_,

在hibernate中映射多对多中,查询ADMIN_INFO表连带出roles的属性时报错,我仔细检查了映射的XML文件对比数据库都没问题,求大神帮忙解决下呀

qq_40333063的博客 1624

CSP历年真题201503-1-图像旋转(C/C++)

一、问题描述 旋转是图像处理的基本操作,在这个问题中,你需要将一个图像逆时针旋转90度。 计算机中的图像表示可以用一个矩阵来表示,为了旋转一个图像,只需要将对应的矩阵旋转即可。 输入格式 二、输入格式 输入的第一行包含两个整数n, m,分别表示图像矩阵的行数和列数。 接下来n行每行包含m个整数,表示输入的图像。 三、输出格式 输出m行,每行包含n个整数,表示原始矩阵逆时针旋转90度后的矩阵。 四、...

GTboy100的博客 1670

Hibernate综合问题

n + 1问题 query.iterate()信息返回迭代查询将开始发表声明:录ID语句      Hibernate: select student0_.id ascol_0_0_from t_student student0_ 然后有多少条记录,会发出多少条查询语句。 n + 1问题:n:有n条记录。发出n条查询语句。1 :发出一条查询全部记录ID语句。 出现n+1的原因...

weixin_33951761的博客 551

RP Fiber Power 版本

RP Fiber Power的版本历史 该软件一直受到多年来广泛的发展计划,这大大扩展了其功能,以及用户界面的质量。 V1 这是第1个版本。 它仅限于光纤激光器和放大器的连续波计算,并且只能通过脚本进行控制。 V2 版本2引入了交互式表单。 至少对于更简单的模拟,现在可以简单地通过填写表单来工作,而V1必须通过脚本来控制。 例如,屏幕截图显示了输入某些信号参数的表单: 当您基于这些表单执行计算时,程序将根据您的表单输入自动编写脚本文件,然后执行该脚本。如果您需要编写脚本以获得更大的灵活性,可以稍后查看该脚

Asdmath的博客 2432

Unity游戏开发:从零开始适配Nintendo Switch的完整指南

本文详细介绍了如何使用Unity进行Nintendo Switch游戏开发的完整流程,包括开发环境搭建、Unity工程适配、手柄与硬件特性开发、存储与性能优化等关键步骤。特别强调了Switch SDK的配置、输入系统改造和内存优化技巧,帮助开发者高效完成跨平台适配。

vodka的博客 1069

9.0 hibernate_检索策略(lazy、fetch、batch-size等)

一、概述 检索策略分三大块,类级别检索策略和关联级别检测策略。 类级别检索策略:get、load、关联级别检索策略:order.getCustomer().getName() 上面这两种应该是看得懂的。很容易去理解,现在就具体来说说这两种其中的细节。 批量检索解决n+1问题。 二、类级别检索策略 2.1、立即检索  get 直接发送sql语句,

yiguang_820的博客 448

AI 智能体(Agent)应用开发工程师 · 进阶面试 (五)

在有多位 Agent 共同参与决策时(如评审委员会、代码审查小组),它们可能提出截然相反的建议。共识机制就是用来在这种冲突中得出唯一行动方案的规则。常用机制:多数投票:每个 Agent 一票,根据投票结果决定。实现简单,但忽略了专业度差异。加权投票:根据 Agent 的角色重要性或历史表现赋予不同权重,例如首席架构师 Agent 的票权重是普通开发者 Agent 的 2 倍。管理者仲裁:由一个权限更高的 Manager Agent 听取各方理由后做出最终裁决。这类似于层级制组织决策。辩论收敛。

篮球界最会写bug的人;程序猿中打球最菜的人。 393

【SSH学习笔记】整合spring3-hibernate的小项目(一)

需求分析: 1、使用spring注入dataSourse数据源 2、使用BaseDao获取注入SessionFactory并返回Session 3、实现查询所有和按字符串查询的方法 4、使用JUNIT测试 操作步骤: 1、创建用户表并添加测试数据 create table users( userid number(8) primary key, usern

某程序猿的喵窝 981

【系统移植】 移植主线U-Boot(v2024.01-rc3)到RK3399

[系统移植] 移植主线U-Boot(v2024.01-rc3)到RK3399

Systemcall名屋 1004

STM32实战开发(128):智能位移检测 - 使用STM32实现位移检测

STM32作为一款功能强大的微控制器,由于其出色的处理能力、丰富的外设接口和低功耗特点,成为实现智能位移检测系统的理想选择。未来,可以通过结合更多传感器、多种数据处理算法以及云平台技术,进一步提升系统的智能化水平,优化位移测量的精度和稳定性。本篇博客将介绍如何使用STM32微控制器实现智能位移检测系统,涉及硬件设计、传感器选择、软件开发等多个方面,提供详细的设计步骤,并给出完整的代码示例,帮助开发者快速搭建智能位移检测系统。蜂鸣器连接到STM32的GPIO端口,当位移超过设定的阈值时,蜂鸣器发出警报。

2201_76125393的博客 901

hibernate 如何实现延迟加载

延迟加载机制是为了避免一些无谓的性能开销而提出来的,所谓延迟加载就是当在真正需要数据的时候,才真正执行数据加载操作。在Hibernate中提供了对实体对象的延迟加载以及对集合的延迟加载,另外在Hibernate3中还提供了对属性的延迟加载。下面我们就分别介绍这些种类的延迟加载的细节。      请继续阅读百度文库:http://wenku.baidu.com/view/3a815d7f17...

meigesir的专栏 537

【部署】OpenClaw版本降级实操(含全量卸载)

本文详细介绍了OpenClaw工具的降级与卸载方法。主要内容包括:1)通过npm安装指定版本的核心命令及国内镜像加速方案;2)两种卸载路径:CLI工具存在时的简易一键卸载(含交互式与非交互式命令)和手动分步卸载流程;3)CLI已删除但服务仍在运行时,针对macOS(launchd)、Linux(systemd)和Windows(计划任务)系统的具体清理步骤。文章特别强调了卸载前备份的重要性,并提供了不同安装方式(常规安装与源码克隆)的额外说明,确保用户能彻底清理所有组件。

海兰 3174

Hibernate fetch lazy cascade inverse 关键字 【转】

 Hibernate最让人头大的就是对集合的加载形式。书看了N次了,还是没有真正理解Hibernate。所以下午专门做了下测试,对配置文件的意思加深了认识。假设有两个表,Photos(一) --- picture(多)Photo包含picture集合结论1: HQL代码 > fetch(配置) > lazy (配置)结论2: 默认 lazy="true"结论3: fetch 和 lazy 主要

foart的专栏 1197

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Hibernate fetch lazy cascade inverse

 Hibernate fetch lazy cascade inverse转自:http://tianping.javaeye.com/blog/139938 Hibernate最让人头大的就是对集合的加载形式。 书看了N次了,还是没有真正理解Hibernate。所以下午专门做了下测试,对配置文件的意思加深了认识。 假设有两个表,Photos(一) --- picture(多)Ph

geek87的专栏 657

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

重新学习 Hibernate fetch lazy cascade inverse 关键字

Hibernate最让人头大的就是对集合的加载形式。 书看了N次了,还是没有真正理解Hibernate。所以下午专门做了下测试,对配置文件的意思加深了认识。 假设有两个表,Photos(一) --- picture(多)Photo包含picture集合 结论1: HQL代码 &gt; fetch(配置) &gt; lazy (配置) 结论2: 默认 lazy="true" 结论3: fet...

dpzxcnq的专栏 152

WINCC7.3破解文件

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

hibernate的NativeSql查询

1、标量查询1.1 /* * 标量查询 * 这里hibernate就是通过元数据判断表的字段顺序和类型,然后放到List<Object[]>中 */ @SuppressWarnings("unchecked") @Test public void test1(){ Session session = HibernateUti

chuxue1989的专栏 384

学习 Hibernate fetch lazy cascade inverse 关键字

Hibernate最让人头大的就是对集合的加载形式。 书看了N次了,还是没有真正理解Hibernate。所以下午专门做了下测试,对配置文件的意思加深了认识。 假设有两个表,Photos(一)  ---  picture(多)Photo包含picture集合 结论1: HQL代码 > fetch(配置) > lazy (配置) 结论2: 默认 lazy="true" 结论3: fe

kangqiao182的专栏 726

Hibernate的延迟加载

hibernate中,延迟加载大致可以分为两类,一类是延迟属性加载,另一类是延迟关联实体加载。 普通属性:分两种情况,一种是集合属性,一种是非集合属性(如String、Integer......) 集合属性的延迟加载通过PersistentSet、 PersistentList、PersistentBag、PersistentMap、PersistentSortedMap、Persistent

r91987的专栏 6144

Hibernate之延迟加载

延迟加载 延迟加载先获取到代理对象,当真正使用到该对象中的属性的时候,才会发送SQL语句,是HIbernate框架提升性能的方式。 类级别的延迟加载 session 对象的load方法默认就是延迟加载 Customer c = session.load(Customer.class ,1L),没有发送SQL语句。当使用该对象的属性时,才发送SQL语句。 使类级别的延迟加载失效。 在&amp;lt;cl...

u011301372的博客 863

Hibernate懒加载详解

两边关于hibernate懒加载的文章,转过来收藏 转自:https://www.cnblogs.com/cornucopia/articles/4541621.html 转自:https://yq.aliyun.com/ziliao/281376     Hibernate懒加载详解   数据库hibernatesessionjoinnullquery 摘要: 本文讲的是Hibe...

aqCat的博客 447

Hibernate 的延迟加载

Hibernate默认进行延迟加载的内容: 1)集合属性 2)puws

ThinkingLink的专栏 649

Hibernate学习笔记(4)——hibernate中实体对象的三种状态与延迟加载机制

实体对象的生命周期是Hibernate 应用中的一个关键概念。实体对象有三种状态: 1.瞬时状态(Transient) 刚用new语句创建,与数据库中的记录没有任何关联,也就是没有与其相关联的数据库记录与Session没有任何关系,也就是没有通过Session对象的实例对其进行任何持久化的操作。 2.持久状态(Persistent) 已经被持久化,且加入到Session的缓存中。每个...

Dear小破的专栏 358

Hibernate4学习总结(4)--注解形式的集合映射,关联关系映射

本文将接着上文,讲解hibernate4的集合映射的注解和关联关系映射的注解。本文包括两个部分: 1.集合映射的注解。 2.关联关系映射的注解。 二、关联关系映射的注解

BlueSky的博客 9572

Hibernate延迟加载

延迟加载:是在真实需要数据才执行SQL语句进行查询,避免无谓的性能开销。    类级可选:立即检索,延迟检索,默认为延迟检索                      立即检索:立即加载对指定的对象,立即发送SQL                      延迟检索:延迟加载指定检索的属性,才发送SQL    无论元素的lazy的属性是true或false , session的get( )

qq_36074150的博客 355

hibernate中的各式集合总结

Hibernate的集合属性映射简称集合映射 集合属性大致有两种: 第一种是单纯的集合属性,如像 List、Set  或数组等集合属性; 另一种是Map结构的集合属性,每个属性值都有对应的Key映射。     集合映射的元素大致有如下几种: List:  用于映射 List  集合属性 Set:  用于映射 Set  集合属性 Map:  用于映射 M

w183705952的专栏 792
上一篇: Hibernate中cascade和inverse
下一篇: 双击jsp提示错误
hack103
博客等级 码龄19年 1粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值