Я новичок в JOOQ и в настоящее время не могу сопоставить объединенный запрос с Map<K, List<V>>
: список всегда содержит только один элемент.
Вот мой код:
DSL.using(...)
.select(ORDER.fields())
.select(ORDER_ITEM_ARTICLE.fields())
.from(ORDER)
.leftOuterJoin(ORDER_ITEM_ARTICLE).on(ORDER.ID.eq(ORDER_ITEM_ARTICLE.ORDER_ID))
// to Map<InOutOrder, List<OrderItemArticle>>
.fetchGroups(
r -> r.into(ORDER).into(InOutOrder.class),
r -> r.into(ORDER_ITEM_ARTICLE).into(OrderItemArticle.class)
)
// map to InOutOrder
.entrySet().stream().map( e -> {
// e.getValue() always returns list with only 1 element?!
e.getKey().articles = e.getValue();
return e.getKey();
})
.collect(Collectors.toList())
;
Скажите У меня есть 1 строка в ORDER
и 2 соответствующие строки в ORDER_ITEM_ARTICLE
. Выполнение SQL, возвращаемого .getSQL()
(после .fetchGroups()
), возвращает мне 2 строки, как и ожидалось, поэтому я предположил, что вызов fetchGroups()
также заполнит мой список двумя записями?!
Что я пропускаю?
Спасибо!
Обновление:
По запросу класс InOutOrder
:
public class InOutOrder extends Order {
public List<OrderItemArticle> articles;
public List<OrderItemOther> others;
public List<OrderItemCost> costs;
public List<OrderContact> contacts;
public List<EmailJob> emailJobs;
}
Так что это просто расширение класса JOOQ POJO и используется для JSON связи с клиентами API ...