hibernate中的投影查詢

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

          org.hibernate.criterion.ProjectionsProjection 的實(shí)例工廠。我們通過調(diào)用 setProjection()應(yīng)用投影到一個查詢。

          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" 。某些投影類型就是被定義為 分組投影,他們也出現(xiàn)在SQL的group by子句中。

          你可以選擇把一個別名指派給一個投影,這樣可以使投影值被約束或排序所引用。下面是兩種不同的實(shí)現(xiàn)方式:

          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()方法簡便的將一個投影實(shí)例包裝到另外一個 別名的Projection實(shí)例中。簡而言之,當(dāng)你添加一個投影到一個投影列表中時 你可以為它指定一個別名:

          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中的投影查詢  回復(fù)  更多評論   

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

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

          Copyright © weibogao

          主站蜘蛛池模板: 富阳市| 万源市| 张北县| 紫阳县| 长沙市| 滨海县| 都昌县| 正定县| 新蔡县| 蒙山县| 镇安县| 天气| 拜泉县| 镇平县| 大英县| 富川| 阜新市| 台安县| 桦南县| 盘山县| 西吉县| 郁南县| 泰安市| 洪洞县| 财经| 黄石市| 文成县| 正镶白旗| 林周县| 乐业县| 石柱| 宝清县| 博罗县| 五家渠市| 湘潭县| 马关县| 迭部县| 乡宁县| 游戏| 迁安市| 同仁县|