Hibernate Criteria查询总结:使用与实战

需积分: 9 1 下载量 177 浏览量 更新于2024-07-29 收藏 107KB DOC 举报
"这篇文章除了介绍Hibernate的Criteria用法外,还涉及了DetachedCriteria、Criterion和Projection等核心概念。作者强调了Criteria在实际项目中的灵活性,并对比了在线Criteria与离线DetachedCriteria的区别。同时,文章还提到了FetchMode、FlushMode和LockMode的设置以及Criterion的实现方式,尤其是通过Restrictions工具类创建查询条件的方法。" 在Java的持久化框架Hibernate中,Criteria API提供了一种动态构建SQL查询的方式,这使得开发者能够更加灵活地构建复杂的查询条件,而无需直接编写SQL语句。Criteria API的设计理念是面向对象,使得查询操作更加符合OO编程的思维。 Criteria是CriteriaSpecification接口的一个实现,它可以直接在HibernateSession上下文中创建并执行查询。这种在线的Criteria可以在当前Session中直接使用,允许开发者实时地构建和执行查询。相反,DetachedCriteria则是独立于Session的,可以在任何地方创建,然后在需要的时候与Session结合执行。DetachedCriteria通过`forClass`或`forEntityName`方法初始化,这在设计时就提供了更多的灵活性,比如在服务层预定义查询条件。 为了指定查询条件,Criteria API使用了Criterion接口。Criterion代表了一个查询条件,可以是简单的比较(如eq、ne、gt、lt等),也可以是逻辑组合(如conjunction和disjunction,对应AND和OR操作)。Restrictions工具类是创建Criterion实例的主要途径,它提供了大量静态方法来构建各种比较条件。 Projection接口则用于定义查询结果的投影,即查询返回的列。它可以是属性、函数、算术表达式,甚至整个实体对象。通过设置Projection,你可以控制查询返回的结果集形式。 此外,Criteria API还允许设置FetchMode来控制关联对象的加载策略,选择一次性加载(EAGER)还是延迟加载(LAZY)。FlushModel定义了Session何时应该被刷新,通常有NEVER、ALWAYS和AUTO几种模式。LockMode则用于控制数据库行级锁定,防止并发问题,有NONE、READ和WRITE等模式。 Hibernate的Criteria API提供了一套强大的查询机制,能够帮助开发者构建复杂的查询条件,同时保持代码的清晰性和可维护性。通过熟悉和熟练使用Criteria、DetachedCriteria、Criterion和Projection,可以显著提高开发效率和应用性能。