JOOQ:fetchGroups() 总是 returns 列表只有一个元素
JOOQ: fetchGroups() always returns list with only one element
我是 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())
;
假设我在 ORDER
中有 1 行,在 ORDER_ITEM_ARTICLE
中有 2 行对应的行。 运行 .getSQL()
返回的 SQL(在 .fetchGroups()
之后),returns me 2 rows as expected,所以我假设 fetchGroups()
调用将填充我的列表也有两个条目?!
我错过了什么?
谢谢!
更新:
根据要求,InOutOrder
class:
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 class 的扩展,用于 JSON 与 API 客户端的通信...
fetchGroups()
只是将对象放在 LinkedHashMap
中。您必须遵守通常的 Map
合同,这意味着实施 equals()
和 hashCode()
。没有它,你正在创建的每个对象(或者 jOOQ 正在为你创建的对象)将使用身份比较,所以你在结果中只得到每个 "value" 一次。
我是 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())
;
假设我在 ORDER
中有 1 行,在 ORDER_ITEM_ARTICLE
中有 2 行对应的行。 运行 .getSQL()
返回的 SQL(在 .fetchGroups()
之后),returns me 2 rows as expected,所以我假设 fetchGroups()
调用将填充我的列表也有两个条目?!
我错过了什么?
谢谢!
更新:
根据要求,InOutOrder
class:
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 class 的扩展,用于 JSON 与 API 客户端的通信...
fetchGroups()
只是将对象放在 LinkedHashMap
中。您必须遵守通常的 Map
合同,这意味着实施 equals()
和 hashCode()
。没有它,你正在创建的每个对象(或者 jOOQ 正在为你创建的对象)将使用身份比较,所以你在结果中只得到每个 "value" 一次。