CriteriaのGroup by

hibernate3からの機能っぽい

Criteria criteria = getSession().createCriteria(Hoge.class);

criteria.setProjection(Projections.projectionList()
    .add( Projections.rowCount())
    .add( Projections.sum("kingaku"))
    .add( Projections.groupProperty("torihikiCode")));


この結果はObject[]のListになって戻ってくる。

List objectlist = criteria.list();
Iterator it = objectlist.iterator();
while (it.hasNext()) {
  Object o = it.next();
  if (o instanceof Object) {
   Object
a = (Object[]) o;
   System.out.println*1;
  }
  else {
   //ここにはこないと思うが一応
   throw new Exception("Help me");
  }
}

配列aの順番はおそらく.add( Projections.〜)した順番。
.add( Projections.groupProperty〜)したものが他のオブジェクトと関連させてある場合(<-なんと言うのだ?)、a[2]のようにオブジェクトが戻ってくる。

検索条件が固定ならHQLの方がいいとは思うが、実のところ使い分けがよく分からなかったり。
と言うか、many-to-oneを含んでいたせいか、さっぱりHQLで結合できなかったりして・・・。

ドキュメント
http://www.hibernate.org/hib_docs/v3/reference/en/html/querycriteria.html

*1:Integer) a[0]);    System.out.println((Long) a[1]);    System.out.println(((TorihikiCodeMas) a[2]).toString(