DetachedCriteria查询和子查询

来源:互联网 发布:淘宝零食销量排行 编辑:程序博客网 时间:2024/06/06 13:17

1.就是我们有时在表示层不能用session时我就用到Criteria离线查询和子查询

DetachedCriteria类使你在一个session范围之外创建一个查询,并且可以使用任意的 Session来执行它

DetachedCriteria query = DetachedCriteria.forClass(Cat.class)    .add( Property.forName("sex").eq('F') );    Session session = ....;Transaction txn = session.beginTransaction();List results = query.getExecutableCriteria(session).setMaxResults(100).list();txn.commit();session.close();
DetachedCriteria也可以用以表示子查询。条件实例包含子查询可以通过Subqueries或者Property获得

DetachedCriteria avgWeight = DetachedCriteria.forClass(Cat.class).setProjection( Property.forName("weight").avg() );session.createCriteria(Cat.class).add( Property.forName("weight).gt(avgWeight) ).list();
DetachedCriteria weights = DetachedCriteria.forClass(Cat.class).setProjection( Property.forName("weight") );session.createCriteria(Cat.class).add( Subqueries.geAll("weight", weights) ).list();
甚至相互关联的子查询也是有可能的


DetachedCriteria avgWeightForSex = DetachedCriteria.forClass(Cat.class, "cat2").setProjection( Property.forName("weight").avg() ).add( Property.forName("cat2.sex").eqProperty("cat.sex") );session.createCriteria(Cat.class, "cat").add( Property.forName("weight).gt(avgWeightForSex) ).list();




                                             
0 0