Car
实体映射到具有 2 列的数据库表:ID
和Color
。
CarDao
有以下方法:
Map<Color, Integer> countByColor();
如果我们在数据库表中有 3 辆红色汽车和 2 辆蓝色汽车,则该方法返回一个带有 2 个键(红色和蓝色)和相应计数(3 和 2)的地图。
我想用 Criteria API 来做到这一点。该方法会是什么样子?让我担心的是地图部分。
谢谢。
Car
实体映射到具有 2 列的数据库表:ID
和Color
。
CarDao
有以下方法:
Map<Color, Integer> countByColor();
如果我们在数据库表中有 3 辆红色汽车和 2 辆蓝色汽车,则该方法返回一个带有 2 个键(红色和蓝色)和相应计数(3 和 2)的地图。
我想用 Criteria API 来做到这一点。该方法会是什么样子?让我担心的是地图部分。
谢谢。
我认为使用 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() 方法。