`

hibernate多表查询HQL 连接条件不能用on

阅读更多
inner join(内连接)
 
left outer join(左外连接)
 
right outer join(右外连接)
 
full join (全连接,并不常用)
 
HQL中的条件用with即:left join ... with...
SQL中的条件用on即:left join ... on...
语句inner join, left outer join 以及 right outer join 可以简写。
from Cat as cat     join cat.mate as mate    left join cat.kittens as kitten
 
通过HQL的with关键字,你可以提供额外的join条件。
from Cat as cat     left join cat.kittens as kitten         with kitten.bodyWeight > 10.0
  
还有,一个"fetch"连接允许仅仅使用一个选择语句就将相关联的对象或一组值的集合随着他们的父对象的初始化而被初始化,这种方法在使用到集合的情况下尤其有用,对于关联和集合来说,它有效的代替了映射文件中的外联接 与延迟声明(lazy declarations).
 from Cat as cat     inner join fetch cat.mate    left join fetch cat.kittens
 
一个fetch连接通常不需要被指定别名, 因为相关联的对象不应当被用在 where 子句 (或其它任何子句)中。同时,相关联的对象 并不在查询的结果中直接返回,但可以通过他们的父对象来访问到他们。
 from Cat as cat     inner join fetch cat.mate    left join fetch cat.kittens child    left join fetch child.kittens
  
假若使用iterate()来调用查询,请注意fetch构造是不能使用的(scroll() 可以使用)。fetch也不应该与setMaxResults() 或setFirstResult()共用,这是因为这些操作是基于结果集的,而在预先抓取集合类时可能包含重复的数据,也就是说无法预先知道精确的行数。fetch还不能与独立的 with条件一起使用。通过在一次查询中fetch多个集合,可以制造出笛卡尔积,因此请多加注意。对bag映射来说,同时join fetch多个集合角色可能在某些情况下给出并非预期的结果,也请小心。最后注意,使用full join fetch 与 right join fetch是没有意义的。
  
如果你使用属性级别的延迟获取(lazy fetching)(这是通过重新编写字节码实现的),可以使用 fetch all properties 来强制Hibernate立即取得那些原本需要延迟加载的属性(在第一个查询中)。
from Document fetch all properties order by name
from Document doc fetch all properties where lower(doc.name) like ''%cats%''
分享到:
评论

相关推荐

    hibernateHQL关联查询

    在理解Hibernate HQL关联查询之前,我们需要先回顾一下数据库表连接的基本概念及其分类。数据库表连接主要分为以下几种: 1. **内连接(Inner Join)**:只返回两个表中满足连接条件的记录。如果某条记录在另一个表...

    hql多表查询

    在IT领域,特别是数据库操作与查询中,HQL(Hibernate ...此外,掌握HQL多表查询不仅有助于优化数据库操作,还能增强对底层数据模型的理解,对于任何从事企业级应用开发的软件工程师而言,都是一项必不可少的技能。

    Hibernate hql查询语法总结

    本文将对Hibernate HQL查询语法进行总结,涵盖基础查询、属性查询、实例化查询以及查询链接等多个方面。 1. 基础查询: 基础查询是最简单的HQL语句,用于获取所有`Student`对象。例如: ```java from Student ``` ...

    hibernate查询语句--HQL

    ### Hibernate 查询语句 -- HQL #### 概述 Hibernate 是一个开源的对象关系映射 (ORM) 框架,它允许开发人员将 Java 对象映射到数据库表中的记录,从而简化了数据访问逻辑。在 Hibernate 中,执行查询操作的主要...

    HQL连接查询和注解使用总结

    ### HQL连接查询和注解使用总结 #### HQL连接查询概述 HQL(Hibernate Query Language)是一种面向对象的查询语言,它允许开发者以一种更自然的方式查询对象,而不是直接查询底层数据库表。HQL支持多种连接查询...

    HQL 连接查询

    综上所述,HQL连接查询为开发者提供了灵活且强大的数据检索手段,无论是隐式连接还是显式连接,都能有效地满足不同场景下的需求。开发者可以根据实际情况选择合适的连接类型和方式,以实现高效的数据访问。

    Hibernate HQL教程

    - **解释**: 多表查询涉及表之间的关联关系,例如一对一、一对多和多对多关系。 ##### 1.4.2 表中的数据 - **解释**: 涉及的表包括`student`、`course`和`sc`等。 ##### 1.4.3 修改持久化类 - **示例**: ```java ...

    HQL查询语言基础

    HQL(Hibernate Query Language)是Hibernate框架中用于操作对象关系映射(ORM)的查询语言,它与SQL类似但更面向对象。HQL提供了丰富的功能来查询和操作数据库中的对象,使得开发人员可以更加专注于业务逻辑而不是...

    HQL查询语言基础!

    在本文中,我们将深入探讨HQL的基本用法,包括单表查询、多表查询以及不同类型的连接(join)。 1. **单表查询** - 在HQL中,`from`关键字用于指定查询的实体。例如,`from eg.cat as cat`表示查询名为`Cat`的实体...

    hibernate的使用心得

    然而,`fetch join`有一些限制,比如不应与`setMaxResults()`或`setFirstResult()`一起使用,也不能与独立的`with`条件结合,且在查询多个集合时可能导致笛卡尔积。 总的来说,理解并熟练掌握HQL的`from`子句、隐式...

    Hibernate查询语句教程a

    在深入探讨Hibernate查询语言(HQL)之前,首先理解Hibernate是什么至关重要。Hibernate是一个流行的Java持久化框架,它简化了数据库操作,通过提供对象关系映射(ORM)功能,将数据库操作转化为面向对象的代码。HQL...

    Hibernate 查询语言

    无论是单表查询还是复杂的多表关联查询,HQL 都能提供简洁且强大的支持。对于 Java 开发者来说,学习 HQL 不仅能够提高数据操作的效率,还能更好地理解 Hibernate 的设计理念及其背后的面向对象思想。

    关联关系按条件查询细

    关联关系是指在数据库设计中,不同表之间的联系,如一对一、一对多、多对多等。本文主要讨论了如何在Java环境下,利用Hibernate框架处理关联关系的查询,包括查询方式的选择、HQL和SQL语句的使用,以及在实际案例中...

    Hibernate问题解决

    - **RIGHT JOIN:** 直接在HQL中使用`RIGHT JOIN`语法,但由于Hibernate不支持直接的`RIGHT JOIN`语法,可以使用`LEFT JOIN`加上额外的条件来模拟`RIGHT JOIN`的效果: ```java String hql = "FROM UserInfo u ...

    Hibernate+中文文档

    10.4.3. 条件查询(Criteria queries) 10.4.4. 使用原生SQL的查询 10.5. 修改持久对象 10.6. 修改脱管(Detached)对象 10.7. 自动状态检测 10.8. 删除持久对象 10.9. 在两个不同数据库间复制对象 10.10. ...

    hibernate所需包(数据库为mysql包)

    查询方面,Hibernate支持HQL(Hibernate Query Language),一种面向对象的查询语言,类似于SQL,但更接近于Java。此外, Criteria API 和 Querydsl 等也是常用的查询工具。例如,可以使用Session的`createQuery()`...

    HibernateAPI中文版.chm

    10.4.3. 条件查询(Criteria queries) 10.4.4. 使用原生SQL的查询 10.5. 修改持久对象 10.6. 修改脱管(Detached)对象 10.7. 自动状态检测 10.8. 删除持久对象 10.9. 在两个不同数据库间复制对象 10.10. ...

    hibernate3.2中文文档(chm格式)

    10.4.3. 条件查询(Criteria queries) 10.4.4. 使用原生SQL的查询 10.5. 修改持久对象 10.6. 修改脱管(Detached)对象 10.7. 自动状态检测 10.8. 删除持久对象 10.9. 在两个不同数据库间复制对象 10.10. ...

    Hibernate中文详细学习文档

    10.4.3. 条件查询(Criteria queries) 10.4.4. 使用原生SQL的查询 10.5. 修改持久对象 10.6. 修改脱管(Detached)对象 10.7. 自动状态检测 10.8. 删除持久对象 10.9. 在两个不同数据库间复制对象 10.10. ...

    hibernate_reference中文文档.pdf

    - **7.5.1 一对多 (one to many)/多对一 (many to one)**:说明使用连接表的双向一对多/多对一关联映射。 - **7.5.2 一对一 (one to one)**:介绍使用连接表的双向一对一关联映射。 - **7.5.3 多对多 (many-to-...

Global site tag (gtag.js) - Google Analytics