DetachedCriteria的使用

设计上可以灵活的根据 Criteria 的特点来方便地进行查询条件的组装。现在对 Hibernate的Criteria 的用法进行总结:

Hibernate 设计了 CriteriaSpecification 作为 Criteria 的父接口,下面提供了 Criteria和DetachedCriteria 。

Criteria 和 DetachedCriteria 的主要区别在于创建的形式不一样, Criteria 是在线的,所

以它是由 Hibernate Session 进行创建的;而 DetachedCriteria 是离线的,创建时无需

Session,DetachedCriteria 提供了 2 个静态方法 forClass(Class) 或 forEntityName(Name)

进行DetachedCriteria 实例的创建。 Spring 的框架提供了getHibernateTemplate

().findByCriteria(detachedCriteria) 方法可以很方便地根据DetachedCriteria 来返回查询结

果。

Criteria 和 DetachedCriteria 均可使用 Criterion 和 Projection 设置查询条件。可以设

置 FetchMode( 联合查询抓取的模式 ) ,设置排序方式。对于 Criteria 还可以设置 FlushModel

(冲刷 Session 的方式)和 LockMode (数据库锁模式)。

1:

DetachedCriteria beautyCriteria =DetachedCriteria.forClass(Beauty.class).createCriteria("customers");

beautyCriteria.add(Restrictions.eq("name", "Gates")):

2:

DetachedCriteria beautyCriteria =DetachedCriteria.forClass(Beauty.class).createAlias("customers","c");

beautyCriteria.add(Restrictions.eq("c.name", "Gates")):

接着有了新的要求,年纪太大的美女不要,还是查找拥有客户Gates的,条件如下:

DetachedCriteria beautyCriteria =DetachedCriteria.forClass(Beauty.class, "b").;

DetachedCriteria customerCriteria =beautyCriteria.createAlias("customers", c");

beautyCriteria.add(Restrictions.le("b.age", new Long(20))):

customerCriteria.add(Restrictions.eq("c.name", "Gates")):

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-23 18:04:19

DetachedCriteria的使用的相关文章

Hibernate DetachedCriteria实现

前段时间在做模糊查询,并利用数据库分页,DAO用hibernate实现,刚开始的时候 根据业务层的数据,拼hql语句进行查询,且不说要进行一些if判断,单从结构上来说, 底层的数据访问层依赖于业务层或者表现层了. 比如说,我想查询姓王的员工,年龄大于30岁的,在DAO显然要name like '%王' and age >30,如果业务发生变化,查询与王**姓名相同,年龄等于30的,那就改hql语句吧, name ='王**' and age =30,数据访问层依赖于业务层,觉得不合理. Hibe

基于Struts2+Hibernate的DetachedCriteria多条件查询

上一篇我们讲诉了基于SSH框架利用Criteria的多条件查询,这一篇我们就接着来看基于SSH框架利用DetachedCriteria的多条件查询. 一.Jsp表单查询页 1 <form action="${pageContext.request.contextPath}/CourseTypeAction_listCourse.action" 2 method="post"> 3 <table width="88%" borde

利用DetachedCriteria构建HQL参数动态匹配

此文章是基于 搭建SpringMVC+Spring+Hibernate平台 1. DetachedCriteria构建类:CriteriaBuilder.java package com.ims.persistence.base; import java.math.BigDecimal; import java.sql.Types; import java.util.Map; import org.apache.commons.lang3.StringUtils; import org.hibe

Hibernate 中的DetachedCriteria。

今天看到项目中在Web层使用DetachedCriteria进行多条件查询操作,如果在web层做持久层操作,事物还存在吗?这是我第一反应,于是乎就去网上查资料了.结果发现即在web层,程序员使用DetachedCriteria来构造查询条件,然后将这个 DetachedCriteria作为方法调用参数传递给业务层对象.对于业务层对象可以获得DetachedCriteria之后,在session范围内直接构造Criteria,进行查询.就此,查询语句的构造完全被搬离到web层实现,而业务层则只负责

DetachedCriteria和Criteria

在常规的Web编程中,有大量的动态条件查询,即用户在网页上面自由选择某些条件,程序根据用户的选择条件,动态生成SQL语句,进行查询. 针对这种需求,对于分层应用程序来说,Web层需要传递一个查询的条件列表给业务层对象,业务层对象获得这个条件列表之后,然后依次取出条件,构造查询语句.这里的一个难点是条件列表用什么来构造?传统上使用Map,但是这种方式缺陷很大,Map可以传递的信息非常有限,只能传递name和value,无法传递究竟要做怎样的条件运算,究竟是大于,小于,like,还是其它的什么,业务

框架 day49 BOS项目练习3(修复window控件BUG,添加/修改/作废取派员,datagrid使用,分页查询(DetachedCriteria离线),formatter函数)

BOS项目笔记第3天 1.    修复window控件bug 把弹出窗口拖动到浏览器窗口外之后无法再拖动     将提供的outOfBounds.js文件复制到项目中     在需要修复的jsp页面引入js文件,可以阻止控件拖出窗口 <script src="${pageContext.request.contextPath }/js/easyui/outOfBounds.js" type="text/javascript"></script&

Criteria和DetachedCriteria的区别与应用

Hibernate 设计了CriteriaSpecification 作为 Criteria 的父接口,下面提供了 Criteria和DetachedCriteria .     Criteria 和 DetachedCriteria 的主要区别在于创建的形式不一样, Criteria 是在线的,所以它是由 Hibernate Session 进行创建的:而 DetachedCriteria 是离线的,创建时无需 Session,DetachedCriteria 提供了 2 个静态方法 forC

DetachedCriteria用法

http://uule.iteye.com/blog/947923转载 在常规的Web编程中,有大量的动态条件查询,即用户在网页上面自由选择某些条件,程序根据用户的选择条件,动态生成SQL语句,进行查询. 针对这种需求,对于分层应用程序来说,Web层需要传递一个查询的条件列表给业务层对象,业务层对象获得这个条件列表之后,然后依次取出条件,构造查询语句.这里的一个难点是条件列表用什么来构造?传统上使用Map,但是这种方式缺陷很大,Map可以传递的信息非常有限,只能传递name和value,无法传递

Criterion &amp; DetachedCriteria

今天笔记主要是记录笔记,以及代码: criteria: 创建查询接口:createCriteria(class) 查询条件接口:add(各种条件); Restrictions 提供了设置参数的各种接口 逻辑运算 not or and 字符串模式匹配 like ilike 范围运算 in not in between between and 比较运算 eq/le/lt..... 集合运算 isNotEmpty 可以链式编程 List grades=session.createCriteria(Gr

hibernate DetachedCriteria 子查询对应sql的in语句

需要从两个关联进行数据查询.找了一下午,可算找到个能看懂的 原文链接:http://blog.sina.com.cn/s/blog_ba1bed340101lvx1.html 从数据库查询的sql语句如下: select * from bdorder where Id in (select DISTINCT details from orderDetail " + "where detailStatus like '%3N') " + "and status lik