Hibernate Criteria查询总结:在线与离线,Criterion与Projection解析

需积分: 9 6 下载量 95 浏览量 更新于2024-07-30 收藏 107KB DOC 举报
"关于Hibernate的Criteria用法的详细总结" 在Java的持久化框架Hibernate中,Criteria API提供了一种灵活且强大的方式来构建动态查询。它允许开发者在运行时构造查询,而不必预先编写SQL或者HQL(Hibernate Query Language)字符串。这种特性在处理复杂的查询逻辑时显得特别有用。 Criteria API的基础是`CriteriaSpecification`接口,它定义了基本的查询行为。有两个主要的实现:`Criteria`和`DetachedCriteria`。`Criteria`是在与Hibernate Session关联的情况下创建的,通常用于直接执行查询操作。而`DetachedCriteria`则可以在不依赖Session的情况下创建,这对于延迟加载或在非事务环境中构建查询非常有用。通过`DetachedCriteria.forClass()`或`DetachedCriteria.forEntityName()`方法可以创建一个离线的查询对象,之后在需要的时候与Session结合执行。 `Criterion`是Criteria查询的核心部分,代表了一个查询条件。`Criteria`对象通过调用`add(Criterion criterion)`方法添加这些条件。`Criterion`接口的常见实现包括`Example`(基于实例的匹配),`Junction`(包含`Conjunction`和`Disjunction`,分别对应AND和OR操作)以及`SimpleExpression`(如相等、大于、小于等比较操作)。`Restrictions`工具类提供了创建这些条件的便捷方法,例如`eq()`用于等于,`ge()`用于大于等于,`between()`用于范围查询等。 除了条件表达式,Criteria API还支持`Projection`,它定义了查询结果的返回形式,比如属性的聚合、计数等。`Projections`类提供了各种静态方法来创建不同的投影类型。 此外,Criteria API还可以设置查询的其他特性,如`FetchMode`控制关联对象的加载策略,`Sort`或`Order`用于指定查询结果的排序,`FlushMode`确定何时将Session中的更改写入数据库,而`LockMode`则用于控制行级锁定,以防止并发问题。 在实际应用中,Criteria API的一个显著优点是它可以很好地与Spring框架集成,特别是`HibernateTemplate`,它提供了`findByCriteria()`方法,使得基于`DetachedCriteria`的查询执行变得简单。 Hibernate的Criteria API提供了一套全面的工具,允许开发者以面向对象的方式构建灵活、可维护的查询,避免了硬编码SQL,提高了代码的可读性和可测试性。理解并熟练掌握Criteria API是每个Hibernate开发者必备的技能之一。