在我们查询Parent对象的时候,默认只有Parent的内容,并不包含childs的信息,如果在Parent.hbm.xml里设置lazy="false"的话才同时取出关联的所有childs内容.
问题是我既想要hibernate默认的性能又想要临时的灵活性该怎么办? 这就是fetch的功能。我们可以把fetch与lazy="true"的关系类比为事务当中的编程式事务与声明式事务,不太准确,但是大概是这个意思。
总值,fetch就是在代码这一层给你一个主动抓取得机会.
Parent parent = (Parent)hibernateTemplate.execute(new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException, SQLException { Query q = session.createQuery( "from Parent as parent "+ " left outer join fetch parent.childs " + " where parent.id = :id" ); q.setParameter("id",new Long(15)); return (Parent)q.uniqueResult(); } }); Assert.assertTrue(parent.getChilds().size() > 0);
你可以在lazy="true"的情况下把fetch去掉,就会报异常. 当然,如果lazy="false"就不需要fetch了。
fetch设置为lazy,查询Parent对象的时候,默认只有Parent的内容,并不包含child的信息,这样可以避免n+1问题。
但又想查询parent时把children得到,就可以用fetch。
fetch主动将child得到并set到children列表中。
HQL语句:from Parent p left join fetch p.children
fetch关键字强制Hibernate进行集合填充操作
如:from TUser user inner join fetch user.addresses
这里的"fetch"关键字表明TAddress对象读出以后立即填充到对应的TUser对象中。
相关推荐
HQL作为一种高度集成的查询语言,不仅简化了数据访问的复杂度,而且通过其丰富的功能,如JOIN和FETCH子句,以及对特定属性的选择,为开发人员提供了灵活的数据检索手段。掌握HQL,意味着能够在Hibernate框架中实现...
### HQL详解 #### 一、HQL简介 HQL,即Hibernate Query Language,是Hibernate框架提供的一种查询语言。它的语法结构与SQL类似,但在设计理念上却是面向对象的,能够很好地处理面向对象程序中的概念,例如继承、多...
String hql = "from User u join fetch u.orders"; ``` 这里的`join fetch`实现了左外连接,并将订单信息一同加载到内存中。 七、HQL动态查询 在实际开发中,需求经常变化,因此动态构建HQL查询语句显得尤为重要。...
【HQL语句经典教程】 Hibernate Query Language(HQL)是Hibernate框架提供的面向对象的查询语言,它在外观上类似于SQL,但具有显著的面向对象特性,如支持继承、多态和关联。本教程将深入讲解HQL的基本概念、用法...
- 通常还需要指定`cascade`和`fetch`策略以控制关联行为。 **1.4 cascade属性和inverse属性的作用与区别** - **cascade属性**: - 用于定义是否将当前对象的操作级联到关联的对象上。 - 常见值有`CascadeType....
HQL(Hibernate Query Language)是Hibernate提供的面向对象的查询语言,它类似于SQL,但更加面向对象。本文将深入解析HQL语句的常见用法。 1. 大小写敏感性 HQL对Java类和属性的名称是大小写敏感的,但在关键字和...
HQL支持多种连接查询方式,包括内连接、左外连接等,并且可以通过`fetch`关键字来明确指定关联级别的查询策略。 #### 各种连接查询详解 - **内连接(Inner Join)** - 语法:`[inner]join` - 描述:内连接只返回...
《HQL语言教程[归类].pdf》是一个关于Hibernate Query Language(HQL)的详细教程,专注于面向对象的查询技术。HQL是Hibernate框架中用于检索和操作对象关系映射数据的强大工具,其语法和SQL有诸多相似之处,但设计...
根据提供的标题、描述以及部分内文,我们可以提炼出与HQL(Hibernate Query Language)相关的多个重要知识点。HQL是一种面向对象的查询语言,用于在Hibernate框架中执行数据库操作。下面将详细阐述这些知识点: ###...
5. **FETCH JOIN**:FETCH JOIN是HQL的一种特殊连接类型,用于优化查询性能,特别是在处理集合时。通过使用FETCH JOIN,可以一次性加载关联对象或集合,避免了多次查询数据库的问题,提高了数据加载效率。 6. **...
在Hibernate查询语言(HQL)或原生SQL查询中,可以使用`Fetch`关键字来显式指定关联对象的加载。例如,在上面的代码片段中,通过`left outer join fetch parent.childs`语句,我们告诉Hibernate在加载`Parent`实体时...
hql = "from User u join fetch u.orders"; users = session.createQuery(hql).list(); ``` 在实际项目中,结合Hibernate的注解方式和HQL查询,开发者可以高效地处理数据库操作,降低了SQL编写的工作量,提高了代码...
### Hibernate HQL 基本操作详解 #### 一、HQL简介 HQL,即Hibernate Query Language,是Hibernate提供的一种强大的查询语言。虽然它的语法结构看起来与SQL类似,但其实质上是一种面向对象的语言,能够理解并处理...
### Hibernate 查询语言 (HQL) #### 一、简介 Hibernate 查询语言(HQL)是一种功能强大的查询语言,它与 SQL 在语法上有一定的相似性,但 HQL 被设计成面向对象的语言,能够理解诸如继承、多态和关联等概念。这种...
Hibernate HQL,全称为Hibernate Query Language,是Hibernate框架中用于对象关系映射(ORM)的查询语言。HQL的设计目标是提供一种面向对象的查询方式,使得开发者能够以类和对象的角度来操作数据库,而不是直接使用...
【hibernate的HQL语句】是Hibernate框架中用于操作数据库的重要组成部分,它是一种面向对象的查询语言,类似于SQL,但更加强调对象的概念。HQL能够处理复杂的对象关系,如继承、多态和关联,使得在进行SSH(Spring、...
### HQL语句语法详解 HQL(Hibernate Query Language)是一种面向对象的查询语言,它提供了灵活而强大的机制来查询数据库中的数据,并将其映射到Java对象上。本篇文章将根据给定的信息深入探讨HQL的基本语法结构...
通过合理地利用HQL提供的特性,如关联查询、不同类型的连接以及fetch连接等,开发者可以更高效地进行数据检索和操作。正确理解和应用HQL的不同组成部分有助于编写出既高效又易于维护的查询逻辑。
- **级联加载**:`String hql = "from Menu m join fetch m.roles r join fetch r.users u where u.userLoginName=?";` 通过`join fetch`一次性加载多个关联表的数据。 ### 小结 HQL提供了丰富的查询语法,能够...
HQL Hibernate 查询语言 HQL(Hibernate Query Language)是 Hibernate 中的一种强大的查询语言,它看起来很像 SQL,但是不要被语法结构上的相似所迷惑,HQL 是非常有意识的被设计为完全面向对象的查询,它可以理解...