Hibernate提供了HQL,方便查询的编写。但是在某些情况下,我更喜欢用Criteria,因为它的语义非常明确。
在处理对象关联的时候,经常要对对象下的某个集合字段进行条件限制。比如下面的类:
public class MainClass{ protected long id; protected int type; protected Set<SubClass> subs= new HashSet<SubClass>(); ...... getter/setter} public class SubClass{ protected long id; protected int value; protected Set<MainClass> ms = new HashSet<MainClass>(); ...... getter/setter}
在初始化数据中,假设MainClass的实例m1含有SubClass的实例s1,s2,s3;MainClass的实例m2含有SubClass的实例s2,s3,s4。
而其中s1,s2,s3,s4的value分别是1,2,3,4
现在要查询出 MainClass中SubClass集合含有SubClass实例value为2的的MainClass实例并且type为1,可以使用下面的查询方法:
DetachedCriteria criteria = DetachedCriteria .forClass(MainClass.class); criteria.add( Restrictions.eq("type", new Integer(1))) .createAlias("subs", "s").add( Restrictions.eq("s.value", new Integer(2)));
执行此查询对象后会得到符合条件的MainClass实例。
需要注意的是在获取的MainClass实例中,subs是完全的记录集,而不是经过过滤的记录集,也就是相当于根据MainClass的ID获取的完整实例一样。
ps:
如果需要过滤subs的记录集,需要使用额外的过滤方法,请参考Hibernate的具体实现。
使用HQL也可以很方便地实现,但是需要给出完整的join标记,不如createAlias来得方面和直观。
分享到:
相关推荐
DetachedCriteria是Hibernate提供的一种灵活、可复用的查询工具,它允许开发者在不同上下文中构建和执行查询。理解并熟练运用DetachedCriteria,有助于提升代码的可维护性和性能。在实际开发中,结合其他Hibernate...
DetachedCriteria 是 Hibernate 中的一种离线查询对象,它可以在不依赖 Session 的情况下生成动态 SQL 语句并进行查询。下面是 DetachedCriteria 查询的详细知识点: 创建 DetachedCriteria 对象 DetachedCriteria...
Hibernate提供了一种灵活的查询语言——HQL(Hibernate Query Language),以及 Criteria 查询和 Criteria API,它们都可以用来获取数据表中的特定字段。 二、Hibernate配置 在使用Hibernate进行查询前,首先需要...
本文将详细介绍Hibernate的五种查询方式,包括HQL查询、Criteria方法、动态查询DetachedCriteria、例子查询、SQL查询以及命名查询,以满足不同场景下的需求。 1. HQL查询: Hibernate Query Language(HQL)是一种...
根据提供的标题、描述以及部分代码内容,我们可以了解到这段材料主要涉及的是Hibernate框架中的HQL(Hibernate Query Language)查询语言的使用。接下来将详细介绍HQL的相关知识点。 ### HQL概述 HQL是Hibernate...
Criteria API 是Hibernate提供的一种面向对象的查询方式,它允许开发者通过构建对象来表示查询条件,而不是直接编写SQL语句。这种查询方式更加符合面向对象编程的思想,降低了SQL语句的硬编码,提高了代码的可读性...
Criteria API提供了一种更为灵活和强大的查询方式,它基于标准的Java对象模型来构建查询条件,支持动态创建查询条件。 **特点:** - **面向对象:** Criteria API完全基于对象,这使得它更加灵活和强大。 - **动态...
示例查询是一种简单的查询方式,使用Hibernate的Session对象直接执行SQL语句。示例代码: ```java static void query(String name){ Session s=null; try{ s=HibernateUtil.getSession(); String sql="select * ...
标题“hibernate的多态查询”指的是在Hibernate框架中,如何进行涉及不同子类的对象查询,这是ORM(对象关系映射)中的一个重要特性,旨在提高代码的灵活性和可扩展性。多态查询允许我们编写一次查询,而无需关心...
HQL是Hibernate提供的面向对象的查询语言,类似于SQL但更接近于面向对象编程的概念。HQL允许开发者以类和对象的方式书写查询,而不是以表格和列。例如,以下是一个简单的HQL查询示例: ```java Session session = ...
7. **Criteria API的DetachedCriteria**:DetachedCriteria允许在不开启Session的情况下构造查询条件,然后在需要时再绑定到Session执行,提高了代码的灵活性。 8. **缓存机制**:Hibernate支持一级缓存和二级缓存...
5. HQL(Hibernate Query Language):Hibernate提供的面向对象的查询语言,类似于SQL,但更适应对象模型。掌握HQL的基本语法,如选择、投影、关联、分组和排序。 6. Criteria API:另一种查询方式,提供更动态和...
假设我们要查询 `User` 表格中的所有资料,可以使用以下方式创建 `DetachedCriteria` 并执行查询: ```java // 创建 DetachedCriteria DetachedCriteria criteria = DetachedCriteria.forClass(User.class); // ...
Hibernate 中 Criteria 的使用 Hibernate 中 Criteria 的使用是 ...Hibernate 中 Criteria 的使用可以灵活地根据查询条件的组装来进行查询,使用 Criterion 和 Projection 设置查询条件,可以实现复杂的查询操作。
5. **查询语言(HQL)**:Hibernate查询语言是一种面向对象的查询语言,类似于SQL但操作对象而非记录。学习HQL的基本语法,如SELECT, FROM, WHERE子句,以及JOIN, GROUP BY, ORDER BY等。 6. **Criteria查询**:另...
使用DetachedCriteria和Criteria可以解决动态条件查询的问题,提高程序的灵活性和可维护性。DetachedCriteria和Criteria可以完全解耦查询条件的构造和业务逻辑,提高程序的可读性和可维护性。 Spring框架对...
5. Criteria API和DetachedCriteria:进一步深入,探讨如何使用Criteria API执行复杂的查询,并介绍DetachedCriteria,用于在不同会话间构建和执行查询。 6. Native SQL:当需要充分利用数据库特定特性时,可以使用...
1. HQL查询:使用Session的createQuery()方法创建HQL(Hibernate Query Language)查询对象,然后设置参数,最后调用list()或uniqueResult()执行查询。 2. QBC查询:Query By Criteria API允许基于Java对象属性进行...
1. **Criteria API**:它是Hibernate提供的一个API,允许开发者使用Java对象来构建查询。相比HQL,Criteria API更具有面向对象的特点,可以动态地构建查询条件,适应复杂的需求。 2. **DetachedCriteria**:这是一...
Criteria API是Hibernate提供的另一种动态查询方式,它允许在运行时构建查询,提供了更强大的灵活性。通过DetachedCriteria、Criteria、Projection等接口,可以方便地实现联表查询,同时支持各种查询条件、排序和...