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

          主站蜘蛛池模板: 镇雄县| 晋州市| 股票| 原阳县| 井冈山市| 观塘区| 富宁县| 福安市| 神农架林区| 邵武市| 会东县| 南充市| 湄潭县| 永平县| 阳山县| 嘉祥县| 古田县| 和平区| 石河子市| 仲巴县| 安仁县| 昆山市| 普兰县| 邹平县| 鄂托克旗| 商城县| 松原市| 揭西县| 托克逊县| 沂水县| 盈江县| 彰武县| 双柏县| 霸州市| 上栗县| 诸城市| 远安县| 平远县| 巫山县| 罗平县| 长宁县|