gpt4 book ai didi

JOOQ:fetchGroups() 总是返回只有一个元素的列表

转载 作者:行者123 更新时间:2023-12-05 07:13:22 25 4
gpt4 key购买 nike

我是 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() 之后),按预期返回 2 行,所以我假设 fetchGroups() call 也会用两个条目填充我的列表?!

我错过了什么?

谢谢!


更新:

根据要求,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 类的扩展,用于与 API 客户端进行 JSON 通信......

最佳答案

fetchGroups() 只是将对象放入 LinkedHashMap 中。您必须遵守通常的 Map 约定,这意味着要实现 equals()hashCode()。没有它,您正在创建的每个对象(或 jOOQ 正在为您创建的对象)都将使用身份比较,因此您只能在结果中获得每个“值”一次。

关于JOOQ:fetchGroups() 总是返回只有一个元素的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60186701/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com