Criteria查询是一种在线查询方式,是通过Hibernate Session进行创建的。而DetachedCriteria查询是一种离线查询方式,创建查询时无需使用Session,可以在Session范围之外创建一个查询,并且可以使用任意的Session执行它。
DetachedCriteria提供了两个静态方法:forClass(Class)和forEntityName(Name)。可以通过这两个方法创建DetachedCriteria实例。
/**
* 使用DetachedCriteria查询
*/
public void testDetachedCriteria(){
//创建离线查询DetachedCriteria实例
DetachedCriteria query=DetachedCriteria.forClass(Books.class)
.add(Property.forName("title").eq("Web应用开发技术"));
//创建Hibernate Session
Session session=HibernateSessionFactory.getSession();
//执行查询
List list=query.getExecutableCriteria(session).list();
Iterator itor=list.iterator();
while(itor.hasNext()){
Books book=(Books)itor.next();
System.out.println(book.getTitle()+" "+book.getAuthor()+" "+book.getContentDescription());
}
}
上述代码中,首先通过DetachedCriteria提供的forClass(Class)方法创建DetachedCriteria实例,即在Session范围之外创建了一个查询。其中,Property可以对某个属性进行查询条件的设置,如“Property.forName(“title”).eq(“web应用开发技术”)”设置的查询条件为:title属性等于“web应用开发技术”。然后创建一个Hibernate Session,并通过该Session的执行查询,即执行query.getExecutableCriteria(session).list()。
补充链接:
http://www.cnblogs.com/mabaishui/archive/2009/10/16/1584510.html