hibernate中的投影查詢

          Posted on 2006-07-05 14:44 weibogao 閱讀(2984) 評論(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

          主站蜘蛛池模板: 垫江县| 新营市| 新建县| 广元市| 德兴市| 林西县| 安义县| 石渠县| 水富县| 曲松县| 鄂尔多斯市| 博白县| 长顺县| 韶山市| 永福县| 麻栗坡县| 蓝山县| 汕头市| 肥城市| 濉溪县| 轮台县| 岢岚县| 西宁市| 虞城县| 巴里| 宽甸| 马尔康县| 阳新县| 乌鲁木齐县| 肃北| 宁国市| 龙州县| 宜君县| 浑源县| 原阳县| 安陆市| 甘孜县| 纳雍县| 祁连县| 皋兰县| 两当县|