Hibernate Criteria查询指南:DetachedCriteria与Criterion解析

需积分: 34 1 下载量 178 浏览量 更新于2024-09-16 收藏 18KB DOCX 举报
"关于Hibernate的Criteria用法的详细解析" Hibernate是一个流行的对象关系映射(ORM)框架,它允许开发者以面向对象的方式操作数据库。Criteria API是Hibernate提供的一个强大的查询工具,它提供了一种灵活的方式来构建动态查询,而无需编写SQL语句。本摘要将深入探讨Criteria API的核心概念和用法。 Criteria API的基础是`CriteriaSpecification`接口,它是所有Criteria查询的起点。有两个主要的实现类:`Criteria`和`DetachedCriteria`。`Criteria`是在与数据库连接的`HibernateSession`中创建的,适合在线查询。而`DetachedCriteria`则可以在没有Session的情况下创建,这使得它可以独立于当前的会话,提高了代码的可重用性。例如,你可以先构造一个`DetachedCriteria`,然后在需要时将其附加到`HibernateTemplate`并执行查询。 `Criteria`和`DetachedCriteria`都可以通过`Criterion`和`Projection`来定义查询条件和结果集。`Criterion`代表单个查询条件,而`Projection`则定义了查询结果的投影,即返回哪些字段或计算结果。 `Criterion`接口有多个实现,包括但不限于`Example`(用于基于对象实例创建查询条件)、`Junction`(用于组合多个条件,其子类`Conjunction`和`Disjunction`分别对应AND和OR操作)和`SimpleExpression`(用于创建基本的比较操作,如等于、大于、小于等)。`Restrictions`工具类是创建`Criterion`实例的主要途径,提供了如`eq`, `ge`, `between`等便捷方法。 `Criteria` API还允许设置其他高级特性,如`FetchMode`来控制关联对象的加载策略,可以是立即加载(EAGER)或延迟加载(LAZY)。此外,`Criteria`还支持设置`FlushMode`来决定何时刷新Session(例如,手动、自动或在查询结束时),以及`LockMode`来处理并发控制,如读锁(READ)和写锁(WRITE)。 使用Criteria API,开发者可以方便地构建复杂的查询逻辑,同时保持代码的清晰和模块化。通过`DetachedCriteria`,还可以在不同的上下文中复用已构建的查询条件,进一步提高代码的灵活性。在Spring框架中,`HibernateTemplate`的`findByCriteria`方法简化了基于`DetachedCriteria`的查询执行。 Hibernate的Criteria API提供了一种强大且灵活的查询机制,使得开发者可以专注于业务逻辑,而不必过多地关注底层的SQL细节。通过熟练掌握Criteria API,可以大大提高开发效率,同时减少由于直接操作SQL可能导致的错误和维护问题。