Hibernate中outerjoin、fetch join的使用

Hibernate学习之路(十二):hibernate实现左外,内(迫切)连接(Oracle) 左连接 迫切左外连接: LEFT JOIN FETCH 关键字表示迫切左外连接检索策略. list() 方法返回的集合中存放实体对象的引用, 每个 Department 对象关联的 Employee 集合都被初始化, 存放所有关联的 Employee 的实体对象. 查询结果中可能会包含重复元素, 可以通过一个 HashSet 来过滤重复元素 /* * 测试迫... 阅读详情

1、outer-join关键字(many-to-one的情况)

outer-join关键字有3个值,分别是true,false,auto,默认是auto。

true: 表示使用外连接抓取关联的内容,这里的意思是当使用load(OrderLineItem.class,"id")时,Hibernate只生成一条SQL语句将OrderLineItem与他的父亲Order全部初始化。

select * from OrderLineItem o left joinOrderpon o.OrderId=p.OrderId where o.OrderLineItem_Id=?

false:表示不使用外连接抓取关联的内容,当load(OrderLineItem.class,"id")时,Hibernate生成两条SQL语句,一条查询OrderLineItem表,另一条查询Order表。这样的好处是可以设置延迟加载,此处要将Order类设置为lazy=true。

select * from OrderLineItem owhere o.OrderLineItem_Id=?

select * from Order p where p.OrderId=?

auto:具体是ture还是false看hibernate.cfg.xml中的配置

注意:如果使用HQL查询OrderLineItem,如 from OrderLineItem o where o.id='id',总是不使用外部抓取,及outer-join失效。

2、outer-join(集合)

由于集合可以设置lazy="true",所以lazy与outer-join不能同时为true,当lazy="true"时,outer-join将一直是false,如果lazy="false",则outer-join用法与1同

3、HQL语句会将POJO配置文件中的关联一并查询,即使在HQL语句中没有明确join。

4、In HQL, the "fetch join" clause can be used for per-query specific outer join fetching. One important thing many people miss there, is that HQL queries will ignore the outer-join attribute you specified in your mapping. This makes it possible to configure the default loading behaviour of session.load() and session.get() and of objects loaded by navigating relationship. So if you specify

and then do

MyObject obj = session.createQuery("from MyObject").uniqueResult();

obj.getMySet().iterator().next();

you will still have an additional query and no outer-join. So you must explicily request the outer-join fetching:

MyObject obj = session.createQuery(

"from MyObject mo left join fetch mo.mySet").uniqueResult();

obj.getMySet().iterator().next();

Another important thing to know is that you can only fetch one collection reference in a query. That means you can just use one fetch join. You can however fetch "one" references in addition, as this sample from the Hibernate Docs demonstrates:

from eg.Cat as cat

inner join fetch cat.mate

left join fetch cat.kittens

We have once considered lifting this limitation, but then decided against it, because using more than one fetch-join would be a bad idea generally: The generated ResultSet becomes huge and is a major performance loss.

So alltogether the "fetch join" clause is an important instrument Hibernate users should learn how to leverage, as it allows tuning the fetch behaviour of a certain use case.

5、join fetch 与 join 的区别

如果HQL使用了连接,但是没有使用fetch关键字,则生成的SQL语句虽然有连接,但是并没有取连接表的数据,还是需要单独的sql取数据,也就是 select a,b,d...中没有连接表的字段

6、如果集合被声明为lazy=true,在HQL中如果显式的使用 join fetch 则延迟加载失效。

7、在one-to-many的one端显式设置fecth="join",则无论如何都采取预先抓取(生成一个SQl),延迟加载失效(生成两个SQL)

8、many-to-one的延迟加载是在配置文件的class标签设置lazy="true",one-to-many和many-to- many的延迟加载是在set标签中设置lazy="true"。而one-to-one不只要在calss标签设置lazy="true",而且要在 one-to-one标签中设置constrained="true".

深入理解JOIN与FETCH选项在JPA中的应用 在Java Persistence API (JPA)中,处理关联关系是常见的需求。特别是当我们需要从数据库中加载多个相关联的实体时,JOIN操作变得尤为重要。本篇博客将通过实例,详细探讨JPA中的JOIN操作以及FETCH选项的使用,帮助开发者更高效地进行数据查询。 阅读详情

相关推荐

代号OneNET02 STM32+ESP8266 WIFI系列-第2节-STM32单片机通过ESP8266连接WIFI访问OneNET OTA服务器实现SOTA远程程序升级

第2节-STM32单片机通过ESP8266连接WIFI访问OneNET OTA服务器实现SOTA远程程序升级,这一节主要是实现通过OneNET OTA服务器将需要更新的程序远程下载到STM32单片机,这一节主要是引导程序和应用程序的讲解。

weixin_44862509的博客 1904

SSH实战-传统三大框架精讲

传统的SSH教学,存在着很大的问题。尤其是Spring整合Struts2道理何在? Spring整合Hibernate是好是坏?本教程采用完全案例教学模式,通过深刻剖析,提出了与传统模式完全不同的更佳解决方案!

比较器和运算放大器-2

今天继续了解输入阻抗问题,观察下图:首先考虑在我们没有接运放时,A点输出电压为6V,当接入如图所示的阻抗时电压还是6V吗?共模电阻和红框内对地电阻并联,阻值变小,相当于5k,通过计算可以求得A点电压变为4V,这样A的值发生了改变,试想一下这样的信号接入到运放的两端是不是相当于比较的两端信号发生了改变,那结果一定会发生偏离。信号源一般内阻是不确定的,一般也不是很小,如果不想改变输入阻抗,那唯一的办法就是改变运放的内阻了,比如内阻改为100K,1M等,越大越好,是不是A点电压就会无限接近6V。

weixin_42855218的博客 1311

Hibernate left join(左连接…

原文地址:left join(左连接)">Hibernate left join(左连接)作者:天涯恨客Hibernate left join一直是困扰我的一个问题,因为对hibernate的关联映射不怎么了解,写的Hql也全部是从sql翻译过来,虽然也是大同小异,因此左连接一直不会用。 其实很简单: 1、先把关联映射配好 User.hbm.xml hibernate-mapping pack

wangshixiu86的专栏 1578

Unidbg逆向阿里系App签名:从环境补全到算法还原实战

在移动安全与协议分析领域,理解应用层签名机制是核心挑战之一。签名算法作为保障通信安全与身份验证的关键技术,其原理通常涉及哈希、加密及密钥协商等基础密码学概念。在Android平台,核心签名逻辑常被加固并隐藏于Native层SO库中,以对抗动态调试与静态分析,这为安全研究和协议兼容带来了技术障碍。Unidbg作为一种基于模拟执行的逆向工程工具,通过模拟ARM指令集和系统调用,允许研究者在脱离真机环境的情况下,可控地执行和调试SO文件,为解决此类问题提供了创新思路。其技术价值在于实现了对加固代码的确定性分析与算

weixin_42525738的博客 939

Gephi新手必看:如何用Excel整理CSV数据快速生成网络图(附模板)

本文为Gephi新手提供了一份从Excel数据整理到生成专业网络图的完整指南。详细讲解了如何构建规范的节点表和边表CSV文件,并导入Gephi进行可视化分析。通过实战案例,帮助读者快速掌握利用Excel整理数据、规避常见错误,并运用布局算法与视觉编码,将复杂关系数据转化为直观的网络洞察。

weixin_28487433的博客 390

hibernate 的left join fetch可以取出lazy对象

hibernate 的left join fetch可以取出lazy对象   当你在one-to-many的时候,设置lazy=true时,取对象的时候会使用延迟加载。 但是你可以使用left join fetch强制取出lazy对象    一个"fetch"连接允许仅仅使用一个选择语句就将相关联的对象或一组值的集合随着他们的父对象的初始化而被初始化,这种方法在使用到集合的情况下尤其有用

飞龙在天 9781

UNITY2022 Cardboard环境搭建

必须安装 Git,并且 git 可执行文件必须位于 PATH 环境变量中。考文档:https://developers.google.cn/cardboard/develop/unity/quickstart?转到 Assets/Samples/Google Cardboard//Hello Cardboard/Scenes/HelloCardboard 场景中。粘贴https://github.com/googlevr/cardboard-xr-plugin.git到文本输入字段中。

weixin_39510925的博客 1211

Join用法,HQL的方法,Hibernate中的fetch

Join用法,HQL的方法,Hibernate中的fetch 以下文字摘自:JOIN,  JOIN2, HQL, Fetch Join用法: 主要有Inner Join 及 Outer Join:   最常用的(默认是Inner): Select Fro

afd_326的专栏 926

[QMT量化交易小白入门]-八十九、深度学习训练多维特征进行金融价格行情预测

本专栏主要是介绍QMT的基础用法,常见函数,写策略的方法,也会分享一些量化交易的思路,大概会写100篇左右。QMT的相关资料较少,在使用过程中不断的摸索,遇到了一些问题,记录下来和大家一起沟通,共同进步。

木头大左的博客 218

Node-RED教程(一):Node-RED的介绍与安装

最新最全的Node-RED,node-red教程都在这里。 本篇介绍node-red的安装。使用docker 安装node-red

知无涯 3万+

hibernate outer join属性浅析

outer join=true,hibernate对该关联进行外连接抓取;outer join=false, hibernate对该关联不进行外连接抓取。当在hibernate.cfg.xml配置文件中的属性<property name="hibernate.max_fetch_depth">0</property>设置为0时,从全局关闭外连接抓取,此时outer-join...

想飞的鱼 272

Android 14.0 开机广播接收慢广播延迟问题分析

在14.0的系统rom定制化开发中,在某些时候在接收开机广播的时候发现,过了一分钟才收到开机广播,接下来就需要分析下 开机广播的相关分发机制,来处理下相关问题

安卓兼职framework和app工程师的博客 631

Join 用法,HQL的方法,Hibernate中的fetch (转载)

Join用法: 主要有Inner Join 及 Outer Join: 最常用的(默认是 Inner): Select From    [On ] Inner Join 的主要精神就是 exclusive , 叫它做排他性吧! 就是讲 Join 规则不相符的资料就会被排除掉, 譬如讲在 Product 中有一项产品的供货商代码 (SupplierId...

luke1991的博客 196

WINCC7.3破解文件

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

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

HQL join fetch

Join用法:主要有Inner Join 及 Outer Join: 最常用的(默认是Inner):Select From    [On ] Inner Join 的主要精神就是 exclusive , 叫它做排他性吧! 就是讲 Join 规则不相符的资料就会被排除掉,譬如讲在 Product 中有一项产品的供货商代码 (SupplierId), 没有出现在 Sup

dodo0_0的专栏 658

efm32 入门.pdf

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

cascade与fetch

在Group。java里的注解:    @OneToMany(mappedBy="group",            cascade={CascadeType.ALL},             fetch=FetchType.EAGER              )       cascade 的注解作用是:group对象的增删改关联到user

王月莹的专栏 8423

温度PID控制PLC程序

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

hibernate left join

今天碰到一个外联结问题,总结解决的步骤: 1. 以前没注意left join on 问题,第一次使用的hql:  table a left join table b on a.id = b.aid 出现异常,经过查询,发现hibernate 不能这样使用 做链接;         2.  table a left join table b where a.id = b.aid 还有有问题,继续

flj924的专栏 1万+

Hibernate中outer-join、lazy 、fetch join关键字的使用

Hibernate中outer-join、lazy 、fetch join关键字的使用 关键字: outer-join lazy fetch join 1、outer-join关键字(many-to-one的情况) outer-join关键字有3个值,分别是true,false,auto,默认是auto。 true: 表示使用外连接抓取关联的内容,这里的意思是当使用load(O...

dhaigang的专栏 451

left join fetch 用法实例记录

left join fetch 应用:查找BusinessVersion表中的信息时同时抓取关联的BusinessOrganInfo信息,记录下来以备后用: BusinessVersion.java @ManyToOne(fetch=FetchType.LAZY)@JoinColumn(name="ORGAN_ID") private BusinessOrganInfo busin

txp1993的专栏 7144

[Hibernate] inner Join和 left Join

@Test public void test11(){ Session ss=HibernateUtil.getSession(); //根据员工名称(SCOTT)找到和他所在的部门的其他员工的信息 String hql=" select e from Emp e inner join e.dept";//下面一条等效 ...

weixin_30396699的博客 340

Hibernate的HQL中使用left join

hql是不存在on关键字的,如果直接使用改语句是会报left join异常 // full join 是left outer join和right outer join的并集 select consumer, order, product, comment from ConsumerBean consumer left join consumer.orderBeans order left join order.productBeans product left join product.c

qq_40813329的博客 3675
上一篇: log4j与Spring集成
下一篇: hibernate执行的SQL语句返回的list集合用Object[]接收遍历
lb8607
博客等级 码龄18年 17粉丝 18原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值