Hibernate Criteria API: рассчитывать и группировать с результатом в карте - PullRequest
0 голосов
/ 04 июня 2010

Объект Car сопоставляется с таблицей базы данных с 2 столбцами: ID и Color.

CarDao имеет следующий метод:

Map<Color, Integer> countByColor();

Если в таблице базы данных есть 3 красных автомобиля и 2 синих автомобиля, метод возвращает карту с двумя ключами (красным и синим) и соответствующим количеством (3 или 2).

Я хотел бы сделать это с помощью Criteria API. Как будет выглядеть метод? Меня беспокоит часть карты.

Спасибо.

1 Ответ

1 голос
/ 04 июня 2010

Я думаю, что то, что вы спрашиваете, невозможно (без беспорядочных действий) с API Criteria: ни один из методов в API не возвращает коллекцию (которая была бы картой в вашем случае), они только возвращают списки.1001 *

Итак, вы могли бы написать свой собственный 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);
    }
}

, чтобы получить кортежи только с двумя элементами (Color и count), используйте метод Criteria.setProjection ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...