首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

Hibernate criterion 步骤总结

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

Hibernate criterion 方法总结
设计上可以灵活的根据 Criteria 的特点来方便地进行查询条件的组装。现在对 ??? .add( Restrictions.disjunction()
??????? .add( Restrictions.isNull("age") )
??????? .add( Restrictions.eq("age", new Integer(0) ) )
??????? .add( Restrictions.eq("age", new Integer(1) ) )
??????? .add( Restrictions.eq("age", new Integer(2) ) )
??? ) )
??? .list();

??? .list();

3. 结果集排序
你可以使用org.

们也出现在SQL的group by子句中。

可以选择把一个别名指派给一个投影,这样可以使投影值被约束或排序所引用。下面是两种不同的

实现方式:

List results = session.createCriteria(Cat.class)
??? .setProjection( Projections.alias( Projections.groupProperty("color"), "colr" ) )
??? .addOrder( Order.asc("colr") )
??? .list();

?

List results = session.createCriteria(Cat.class)
??? .setProjection( Projections.groupProperty("color").as("colr") )
??? .addOrder( Order.asc("colr") )
??? .list();

alias()和as()方法简便的将一个投影实例包装到另外一个 别名的Projection实例中。简而言之,

当你添加一个投影到一个投影列表中时 你可以为它指定一个别名:

List results = session.createCriteria(Cat.class)
??? .setProjection( Projections.projectionList()
??????? .add( Projections.rowCount(), "catCountByColor" )
??????? .add( Projections.avg("weight"), "avgWeight" )
??????? .add( Projections.max("weight"), "maxWeight" )
??????? .add( Projections.groupProperty("color"), "color" )
??? )
??? .addOrder( Order.desc("catCountByColor") )
??? .addOrder( Order.desc("avgWeight") )
??? .list();


List results = session.createCriteria(Domestic.class, "cat")
??? .createAlias("kittens", "kit")
??? .setProjection( Projections.projectionList()
??????? .add( Projections.property("cat.name"), "catName" )
??????? .add( Projections.property("kit.name"), "kitName" )
??? )
??? .addOrder( Order.asc("catName") )
??? .addOrder( Order.asc("kitName") )
??? .list();


也可以使用Property.forName()来表示投影:

List results = session.createCriteria(Cat.class)
??? .setProjection( Property.forName("name") )
??? .add( Property.forName("color").eq(Color.BLACK) )
??? .list();
List results = session.createCriteria(Cat.class)
??? .setProjection( Projections.projectionList()
??????? .add( Projections.rowCount().as("catCountByColor") )
??????? .add( Property.forName("weight").avg().as("avgWeight") )
??????? .add( Property.forName("weight").max().as("maxWeight") )
??????? .add( Property.forName("color").group().as("color" )
??? )
??? .addOrder( Order.desc("catCountByColor") )
??? .addOrder( Order.desc("avgWeight") )
??? .list();


8. 离线(detached)查询和子查询
DetachedCriteria类使你在一个session范围之外创建一个查询,并且可以使用任意的 Session来

执行它。

DetachedCriteria query = DetachedCriteria.forClass(Cat.class)
??? .add( Property.forName("sex").eq('F') );
//创建一个Session
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();

热点排行