У меня есть объект Order (который, ну, в общем, представляет заказ), и у каждого заказа есть набор DeliveryDates.
Я пытаюсь реализовать функцию поиска и показать результаты в JFace TableViewer.
Я хочу, чтобы для каждого заказа, имеющего более одной даты доставки, он дублировался в таблице, но в столбце DeliveryDate будет отображаться конкретная дата доставки для этого экземпляра.
Этот запрос легко выполняется в SQL с помощью простого объединения, и строки дублируются с различной датой для каждой строки.
Поскольку я выполняю функцию поиска, я строю запрос поэтапно (в зависимости от того, какие параметры поиска выбрал пользователь), поэтому создание запроса с использованием критериев очень полезно. Проблема в том, что список результатов, который я получаю, дублируется (что нормально), но каждая сущность просто содержит один и тот же набор DeliveryDates - поэтому я не могу напечатать другую дату для разных строк одного и того же Ордена.
Есть ли способ сделать это с помощью Critera? А если нет, то как я могу это сделать?
Редактировать : Редактировать: Например, этот HQL-запрос выглядит примерно так: «выберите dd.deliveryDate, od из Order as od left join od.deliveryDates dd»
Ответ :
Я нашел решение:
Criteria crit = session.createCriteria(Order.class)
.createAlias("deliveryDates", "dd")
.setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP);
Я дал псевдоним коллекции deliveryDates и использовал ResultTransformer, чтобы возвращать результаты на карте. Список результатов поиска будет содержать карты с двумя ключами: «this» (он же Criteria.ROOT_ALIAS) и «dd». Это даст мне дублирование строк, которое я хотел, и теперь я могу получить соответствующие объекты следующим образом:
Map map = (Map) element;
Order ord = (Order) map.get(Criteria.ROOT_ALIAS);
DeliveryDate dd = (DeliveryDate) map.get("dd");