`

灵活使用Hibernate的查询对象DetachedCriteria

阅读更多

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来得方面和直观。 

分享到:
评论

相关推荐

    Hibernate 使用DetachedCriteria操作

    DetachedCriteria是Hibernate提供的一种灵活、可复用的查询工具,它允许开发者在不同上下文中构建和执行查询。理解并熟练运用DetachedCriteria,有助于提升代码的可维护性和性能。在实际开发中,结合其他Hibernate...

    DetachedCriteria查询

    DetachedCriteria 是 Hibernate 中的一种离线查询对象,它可以在不依赖 Session 的情况下生成动态 SQL 语句并进行查询。下面是 DetachedCriteria 查询的详细知识点: 创建 DetachedCriteria 对象 DetachedCriteria...

    Hibernate_query查询数据表中的一个字段.

    Hibernate提供了一种灵活的查询语言——HQL(Hibernate Query Language),以及 Criteria 查询和 Criteria API,它们都可以用来获取数据表中的特定字段。 二、Hibernate配置 在使用Hibernate进行查询前,首先需要...

    hibernate查询详解

    本文将详细介绍Hibernate的五种查询方式,包括HQL查询、Criteria方法、动态查询DetachedCriteria、例子查询、SQL查询以及命名查询,以满足不同场景下的需求。 1. HQL查询: Hibernate Query Language(HQL)是一种...

    HQL是hibernate自己的一套查询

    根据提供的标题、描述以及部分代码内容,我们可以了解到这段材料主要涉及的是Hibernate框架中的HQL(Hibernate Query Language)查询语言的使用。接下来将详细介绍HQL的相关知识点。 ### HQL概述 HQL是Hibernate...

    hibernate里面的 两种查询

    Criteria API 是Hibernate提供的一种面向对象的查询方式,它允许开发者通过构建对象来表示查询条件,而不是直接编写SQL语句。这种查询方式更加符合面向对象编程的思想,降低了SQL语句的硬编码,提高了代码的可读性...

    hibernate中的查询方式

    Criteria API提供了一种更为灵活和强大的查询方式,它基于标准的Java对象模型来构建查询条件,支持动态创建查询条件。 **特点:** - **面向对象:** Criteria API完全基于对象,这使得它更加灵活和强大。 - **动态...

    六种方式实现hibernate查询

    示例查询是一种简单的查询方式,使用Hibernate的Session对象直接执行SQL语句。示例代码: ```java static void query(String name){ Session s=null; try{ s=HibernateUtil.getSession(); String sql="select * ...

    hibernate的多态查询

    标题“hibernate的多态查询”指的是在Hibernate框架中,如何进行涉及不同子类的对象查询,这是ORM(对象关系映射)中的一个重要特性,旨在提高代码的灵活性和可扩展性。多态查询允许我们编写一次查询,而无需关心...

    Hibernate教程21_HIbernate查询

    HQL是Hibernate提供的面向对象的查询语言,类似于SQL但更接近于面向对象编程的概念。HQL允许开发者以类和对象的方式书写查询,而不是以表格和列。例如,以下是一个简单的HQL查询示例: ```java Session session = ...

    孙卫琴 精通Hibernate.pdf

    7. **Criteria API的DetachedCriteria**:DetachedCriteria允许在不开启Session的情况下构造查询条件,然后在需要时再绑定到Session执行,提高了代码的灵活性。 8. **缓存机制**:Hibernate支持一级缓存和二级缓存...

    使用Hibernate开发租房系统第12章课件包含代码

    5. HQL(Hibernate Query Language):Hibernate提供的面向对象的查询语言,类似于SQL,但更适应对象模型。掌握HQL的基本语法,如选择、投影、关联、分组和排序。 6. Criteria API:另一种查询方式,提供更动态和...

    DetachedCriteria Criteria 使用方法

    假设我们要查询 `User` 表格中的所有资料,可以使用以下方式创建 `DetachedCriteria` 并执行查询: ```java // 创建 DetachedCriteria DetachedCriteria criteria = DetachedCriteria.forClass(User.class); // ...

    Hibernate中Criteria的使用

    Hibernate 中 Criteria 的使用 Hibernate 中 Criteria 的使用是 ...Hibernate 中 Criteria 的使用可以灵活地根据查询条件的组装来进行查询,使用 Criterion 和 Projection 设置查询条件,可以实现复杂的查询操作。

    Hibernate 3.2.0 中文官方文档

    5. **查询语言(HQL)**:Hibernate查询语言是一种面向对象的查询语言,类似于SQL但操作对象而非记录。学习HQL的基本语法,如SELECT, FROM, WHERE子句,以及JOIN, GROUP BY, ORDER BY等。 6. **Criteria查询**:另...

    浅谈DetachedCriteria和Criteria的使用方法(必看)

    使用DetachedCriteria和Criteria可以解决动态条件查询的问题,提高程序的灵活性和可维护性。DetachedCriteria和Criteria可以完全解耦查询条件的构造和业务逻辑,提高程序的可读性和可维护性。 Spring框架对...

    Hibernate 手册中文版chm格式

    5. Criteria API和DetachedCriteria:进一步深入,探讨如何使用Criteria API执行复杂的查询,并介绍DetachedCriteria,用于在不同会话间构建和执行查询。 6. Native SQL:当需要充分利用数据库特定特性时,可以使用...

    Hibernate执行持久层访问步骤

    1. HQL查询:使用Session的createQuery()方法创建HQL(Hibernate Query Language)查询对象,然后设置参数,最后调用list()或uniqueResult()执行查询。 2. QBC查询:Query By Criteria API允许基于Java对象属性进行...

    Hibernate QBC高级查询.rar

    1. **Criteria API**:它是Hibernate提供的一个API,允许开发者使用Java对象来构建查询。相比HQL,Criteria API更具有面向对象的特点,可以动态地构建查询条件,适应复杂的需求。 2. **DetachedCriteria**:这是一...

    Hibernate-基础联表模板

    Criteria API是Hibernate提供的另一种动态查询方式,它允许在运行时构建查询,提供了更强大的灵活性。通过DetachedCriteria、Criteria、Projection等接口,可以方便地实现联表查询,同时支持各种查询条件、排序和...

Global site tag (gtag.js) - Google Analytics