Car
实体映射到包含2列的数据库表:ID
和Color
。
CarDao
有以下方法:
Map<Color, Integer> countByColor();
如果我们在数据库表中有3辆红色汽车和2辆蓝色汽车,该方法将返回一个包含2个键(红色和蓝色)和相应计数(3个相应的2个)的地图。
我想使用Criteria API执行此操作。这个方法会是什么样的?这是地图部分让我担心。
感谢。
答案 0 :(得分:1)
我认为你所要求的是不可能(没有搞乱的东西)使用Criteria API:API中没有一个方法返回一个集合(在你的情况下会是一个地图),它们只返回列表。 / p>
所以你可以做的就是编写自己的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()方法。