hibernate中的投影查詢

          Posted on 2006-07-05 14:44 weibogao 閱讀(2986) 評論(1)  編輯  收藏 所屬分類: software development
          投影(Projections)、聚合(aggregation)和分組(grouping)

          org.hibernate.criterion.ProjectionsProjection 的實例工廠。我們通過調用 setProjection()應用投影到一個查詢。

          List results = session.createCriteria(Cat.class)
              .setProjection( Projections.rowCount() )
              .add( Restrictions.eq("color", Color.BLACK) )
              .list();
          List results = session.createCriteria(Cat.class)
              .setProjection( Projections.projectionList()
                  .add( Projections.rowCount() )
                  .add( Projections.avg("weight") )
                  .add( Projections.max("weight") )
                  .add( Projections.groupProperty("color") )
              )
              .list();

          在一個條件查詢中沒有必要顯式的使用 "group by" 。某些投影類型就是被定義為 分組投影,他們也出現在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();

          Feedback

          # re: hibernate中的投影查詢  回復  更多評論   

          2008-04-26 11:51 by asd
          是個垃圾,這個例子在很多地方都有,一點都沒變動

          posts - 41, comments - 7, trackbacks - 0, articles - 0

          Copyright © weibogao

          主站蜘蛛池模板: 罗山县| 杭锦后旗| 兴城市| 凉山| 茂名市| 海林市| 黔江区| 年辖:市辖区| 蓬安县| 客服| 宣化县| 读书| 营口市| 右玉县| 通榆县| 兴隆县| 英超| 施秉县| 贵南县| 云梦县| 八宿县| 利津县| 巴里| 潞西市| 光泽县| 河北省| 娄底市| 迁西县| 汕尾市| 宁夏| 上犹县| 黔西县| 科尔| 乌拉特前旗| 合江县| 陈巴尔虎旗| 乐清市| 潼南县| 日土县| 甘肃省| 陇川县|