ITEEDU

From Gossip@caterpillar

Hibernate Gossip: DetchedCriteria

Criteria与Session绑定,其生命周期跟随着Session结束而结束,使用Criteria时进行查询时,每次都要于执行时期动态建立对象,并加入各种查询条件,随着Session的回收,Criteria也跟着回收。

为了能够重复使用Criteria对象,在Hibernate 3中新增了DetchedCriteria,您可以先建立DetchedCriteria实例,并加入各种查询条件,并于需要查询时再与Session绑 定,获得一个绑定Session的Criteria对象,例如:
// 先建立DetchedCriteria对象
DetachedCriteria detchedCriteria = DetachedCriteria.forClass(User.class);
// 加入查询条件
detchedCriteria.add(Restrictions.ge("age",new Integer(25)));
        
Session session = sessionFactory.openSession();
// 绑定Session并返回一个Criteria实例
Criteria criteria = detchedCriteria.getExecutableCriteria(session);
        
List users = criteria.list();
Iterator iterator =  users.iterator();
System.out.println("id \t name/age");
while(iterator.hasNext()) {
    User ur = (User) iterator.next();
    System.out.println(ur.getId() +" \t " + ur.getName() +"/" +ur.getAge());
}