0

Car实体映射到具有 2 列的数据库表:IDColor

CarDao有以下方法:

Map<Color, Integer> countByColor();

如果我们在数据库表中有 3 辆红色汽车和 2 辆蓝色汽车,则该方法返回一个带有 2 个键(红色和蓝色)和相应计数(3 和 2)的地图。

我想用 Criteria API 来做到这一点。该方法会是什么样子?让我担心的是地图部分。

谢谢。

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);
    }
}

要获取只有两个元素(颜色和计数)的元组,请使用 Criteria.setProjections() 方法。

于 2010-06-04T13:06:13.060 回答