Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Hibernate在查询惰性关联时获取渴望关联

Hibernate在查询惰性关联时获取渴望关联
EN

Stack Overflow用户
提问于 2014-08-06 07:27:06
回答 2查看 1.3K关注 0票数 0

我有一个常见的亲子关系的情况,比如:

代码语言:javascript
运行
AI代码解释
复制
class Parent {
    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    List<ChildOne> childrenOne;

    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER) 
    List<ChildTwo> childrenTwo;

    @OneToMany
    List<LazyChild> lazyChildren;

    @Id
    Long id;
}

然后我有如下的HQL查询:

代码语言:javascript
运行
AI代码解释
复制
select lazyChild from Parent p 
join p.lazyChildren lazyChild
where p.id = ? and lazyChild.mnemonic='AAA'

当我执行它的时候,我得到了LazyChild对象,它就是我想要的。但是hibernate也会初始化所有急切定义的集合,这是我不想要的。hibernate发出单独的调用来获取渴望的关联,这是不直观的。我通过切换到show SQL query来查看它。

如何避免不必要的SQL调用?

EN

回答 2

Stack Overflow用户

发布于 2014-08-06 07:33:02

通过指定FetchType.EAGER,您已经告诉Hibernate,每次加载父对象时,您都希望它加载这些子对象。如果您不希望发生这种情况,则不能指定急切获取类型。

Hibernate不够聪明,不知道当您查询Parent时,您只需要lazyChild。它所知道的就是您已经向Parent对象发出了一个请求,所以它需要加载急切的抓取子对象。

如果你是Hibernate的新手,你可能会发现我的教程here很有帮助。

票数 1
EN

Stack Overflow用户

发布于 2014-08-06 09:42:07

我不太明白你想做什么。但是如果你不想加载你的集合childrenOnechildrenTwo,你可能应该用FetchType.LAZY来声明它们。

在我看来,你没有查询到正确的实体,如果你只是想要一个LazyChild列表,那么你的HQL应该是这样的:

代码语言:javascript
运行
AI代码解释
复制
from LazyChild child
where child.parent.id = ? and child.mnemonic='AAA'

假设您在LazyChild实体中映射了父实体:

代码语言:javascript
运行
AI代码解释
复制
@ManyToOne //(fetch=FetchType.LAZY) if you don't need to have the parent loaded
@JoinColumn(name = "parent_id")
private Parent parent;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25154542

复制
相关文章
Hibernate关联查询
文章目录 1. Hibernate关联查询 1.1. 关联查询之延迟加载(lazy) 1.1.1. 什么是延迟加载 1.1.2. 什么是关联查询的延迟加载 1.1.3. 一对一 1.1.3.1. 测试 1.1.3.1.1. 测试默认的情况(饿汉式的加载) 1.1.3.1.2. 测试懒加载 1.1.3.2. 总结 1.1.4. 一对多或者多对一 1.1.5. 多对多 Hibernate关联查询 关联查询之延迟加载(lazy) 什么是延迟加载 前面单独讲过延迟加载就是在根据id查询获取的对象中只是有一个id
爱撒谎的男孩
2019/12/31
1.3K0
mybatisplus关联表查询_hibernate多表查询
我们在设计表的时候往往一个表的外键作为另一张表的主键,那么我们在查询的时候就要查询两个表的数据。
全栈程序员站长
2022/10/05
1.8K0
mybatisplus关联表查询_hibernate多表查询
Hibernate关联关系
文章目录 1. Hibernate关联关系 1.1. 一对一 1.1.1. 背景 1.1.2. 准备 1.1.3. 单向外键关联 1.1.3.1. 通过丈夫访问妻子 1.1.3.2. 通过妻子访问丈夫 1.1.3.3. 总结 1.1.4. 双向外键关联(@OneToOne(mappedBy=””) 1.1.4.1. 问题 1.1.4.2. 解决办法 1.1.4.3. 实现 1.1.4.4. 测试 1.2. 一对多 1.2.1. 准备 1.2.2. 前提须知 1.2.3. 单向外键关联 1.2.3.1.
爱撒谎的男孩
2019/12/31
6.3K1
hibernate 关联映射(2)
<mapping resource="com/nerd/entity/Person.hbm.xml"/>
用户5166556
2019/04/16
4360
Hibernate关联关系映射[通俗易懂]
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/115516.html原文链接:https://javaforall.cn
全栈程序员站长
2022/07/10
5870
Hibernate的关联映射
首先我们了解一个名词ORM,全称是(Object Relational Mapping),即对象关系映射。ORM的实现思想就是将关系型数据库中表的数据映射成对象,以对象的形式展现,这样开发人员就可以把对数据库的操作转化为对这些对象的操作。Hibernate正是实现了这种思想,达到了方便开发人员以面向对象的思想来实现对数据库的操作。 Hibernate在实现ORM功能的时候主要用到的文件有:映射类(*.java)、映射文件(*.hbm.xml)和数据库配置文件(*.properties/*.cfg.xml),
nnngu
2018/04/03
1.4K0
Hibernate的关联映射
Hibernate学习---关联关系映射
关联关系是用到的最多的一种关系,非常重要,在内存中反映为实体关系,映射到DB中主键外键关系,实体间的关联,即对外键的维护,关联关系的发生,即对外键数据的改变。 在这里就不赘述什么是外键什么是主键了。 一丶关联的的数量 实体对象间的关联从数量上可以划分为 1:1(一对一) 1:N(一对多) N:1(多对一) M:N(多对多) 二丶关联属性 Java代码实体定义中,声明另一个实例类类型或其集合类型的属性,称为关联属性。 public class Department{ private Integer
MindMrWang
2018/04/16
1.3K0
Hibernate学习---关联关系映射
hibernate的关联与级联
1、关联指的是类之间的引用关系。如果类A与类B关联,那么被引用的类B将被定义为类A的属性。 2、关联的分类:关联可以分为一对一、一对多/多对一、多对多关联
全栈程序员站长
2022/08/04
1.3K0
hibernate的关联与级联
关于SpringMVC+Hibernate框架的关联查询与分页查询
hibernete使用多表查询,并且要求查询某表中的某些指定字段时,就需要自己在实体类中创建一个用于关联查询的对象。因为getCurrentSession().createQuery()方法返回的是Object对象数组,无法强制转型。
良月柒
2019/03/19
1.2K0
java之hibernate之关联映射之多对一单向关联
1.在之前学习了单表的crud操作。在实际应用中,大都是多表关联操作,这篇会学习如何处理多表之间的关系。
Vincent-yuan
2019/09/11
5760
java之hibernate之关联映射之多对一单向关联
初识Hibernate之关联映射(一)
本文介绍了关联映射的基本概念、实现方式以及源码解析。关联映射作为数据库对象之间的关联关系的映射,包括一对一关联、一对多关联、多对多关联和关联集合。实现方式包括使用注解、使用XML和JSON方式配置关联映射、使用继承和接口实现关联映射以及使用Spring Data JPA简化关联映射。关联映射的源码解析包括配置解析、对象创建、对象查询和对象更新。
Single
2018/01/04
1.4K0
初识Hibernate之关联映射(一)
Mybatid关联表查询
一、一对一关联  1.1、提出需求   根据班级id查询班级信息(带老师的信息) 1.2、创建表和数据   创建一张教师表和班级表,这里我们假设一个老师只负责教一个班,那么老师和班级之间的关系就是一种一对一的关系。 1 CREATE TABLE teacher( 2 t_id INT PRIMARY KEY AUTO_INCREMENT, 3 t_name VARCHAR(20) 4 ); 5 CREATE TABLE class( 6 c_id INT PRIM
汤高
2018/01/11
3.3K0
Mybatid关联表查询
SQL关联查询
自连接:当table1和table2本质上是同一张表,只是用取别名的方式虚拟成两张表以代表不同的意义
咕咕星
2020/08/19
9750
SQL关联查询
MybatisFlex关联查询
在 MyBatis-Flex 中,提供了 4 个 Relations 注解,他们分别是:
流年Felix
2023/09/05
8071
Dapper关联查询
1、一对一: using (IDbConnection connecton = new MySqlConnection(ConfigurationManager.ConnectionStrings["default"].ConnectionString)) { string sql = @"SELECT * from expand_userbasicinformation b
guokun
2020/09/03
1.1K0
初识Hibernate之关联映射(二)
本文介绍了Hibernate中关联映射的几种实现方式,包括单向一对多关联、单向多对一关联、双向一对多关联、双向多对一关联以及单向一对一关联。同时介绍了在关联映射中如何配置外键、延迟加载以及级联操作。
Single
2018/01/04
1K0
初识Hibernate之关联映射(二)
Mybatis关联、集合查询
关联查询(一对一) 场景:一个作者(Author)有一个博客(Blog) Blog.java public class Blog { private String id; private String authorId; private Author author; //get & set } BlogMapper.xml <resultMap id="blogResult" type="Blog"> <associatio
翟凤玺
2020/10/29
5250
Hibernate映射多对多关联关系
在Hibernate中,多对多关联关系(Many-to-Many relationships)是指两个实体类之间的一种关系,其中一个实体类可以与多个另一个实体类相关联,而同样一个实体类也可以与多个另一个实体类相关联。例如,在一个公司中,一个员工可能会在不同的项目中工作,而同样一个项目也可能需要多个员工协同完成。在ORM框架中,多对多关系的映射可以使用中间表、双向一对多关系和关联实体类等多种方式实现。
堕落飞鸟
2023/05/16
1.4K0
MySQL多表关联查询
SQL 连接(JOIN) 子句用于把来自两个或多个表的行结合起来,基于这些表之间的共同字段。连接的结果可以在逻辑上看作是由SELECT语句指定的列组成的新表。左连接与右连接的左右指的是以两张表中的哪一张为基准,它们都是外连接。外连接就好像是为非基准表添加了一行全为空值的万能行,用来与基准表中找不到匹配的行进行匹配。假设两个没有空值的表进行左连接,左表是基准表,左表的所有行都出现在结果中,右表则可能因为无法与基准表匹配而出现是空值的字段。
全栈程序员站长
2022/08/23
5.2K0
MySQL多表关联查询
mybatis 多表查询,关联模型
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
suveng
2019/09/17
9970
mybatis 多表查询,关联模型

相似问题

如何在Hibernate中获取惰性关联?

19

Java - Hibernate -查询-关联

10

Hibernate搜索,查询关联

10

Hibernate关联条件查询

20

在联接Hibernate中获取关联

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档