0

エンティティは、とCarの2つの列を持つデータベーステーブルにマップされます。IDColor

CarDao次の方法があります。

Map<Color, Integer> countByColor();

データベーステーブルに3台の赤い車と2台の青い車がある場合、このメソッドは2つのキー(赤と青)と対応するカウント(3つまたは2つ)を持つマップを返します。

CriteriaAPIを使用してこれを実行したいと思います。メソッドはどのようになりますか?私が心配しているのは地図の部分です。

ありがとう。

4

1 に答える 1

1

Criteria APIでは(面倒なことをせずに)あなたが求めていることは不可能だと思います。APIのメソッドはどれもコレクション(あなたの場合はマップ)を返しません。リストのみを返します。

したがって、できることは、最初で唯一の要素がマップになるシングルトンリストを返す独自のResultTransformerを作成することです...しかし、それは私の意見では少し厄介です。

そんな感じ :

public class MyResultTransformer implements ResultTransformer {
    public Object transformTuple(Object[] tuple, String[] aliases) {
      return tuple;
    }
    public List transformList(List collection) {
      Map result = new LinkedHashMap(); // to preserve order
      // build the map from the collection
      ...
      return Collections.singletonList(result);
    }
}

2つの要素(Colorとcount)のみを持つタプルを取得するには、Criteria.setProjections()メソッドを使用します。

于 2010-06-04T13:06:13.060 に答える