当前位置: 首页 > 知识库问答 >
问题:

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

史默
2023-03-14

我是JOOQ新手,目前无法将连接查询映射到映射

这是我的代码:

        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行,在订单项目文章中有2行。运行由返回的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类的扩展,用于与API客户机的JSON通信。。。

共有1个答案

韩单弓
2023-03-14

fetchGroups()只需将对象放在链接地图中。您必须遵守通常的映射契约,这意味着实现equals()hashCode()。如果没有它,您正在创建的每个对象(或jOOQ为您创建的对象)都将使用身份比较,因此您只会在结果中获得一次每个“值”。

 类似资料:
  • 问题内容: 我有一个pojo,尝试将csv文件中的数据读取到列表中,然后将其打印出来。从文件读取工作正常,在读取/添加的瞬间,我可以看到正确的ID,但是一旦尝试将其全部打印回来,我只会得到列表的最后一个元素。以下是我正在尝试的: 我从上面得到的输出是: 团队编号为:1 团队编号为:2 团队编号为:3 团队编号为:4 球队信息:4 球队信息:4 球队信息:4 球队信息:4 我想念什么..?为什么前三

  • 这工作正常: 我得到了一个非常好的JSON数组和对象。 现在的问题是,我喜欢将我的数据作为有效载荷放入响应中,以便能够设置标头和状态,或者返回一个错误对象作为有效载荷。但是不管用。 Mai 16,2012 7:00:35 PMorg.apache.cxf.jaxrs.interceptor.JAXRSOutInterceptor写响应错误消息警告:未找到响应类ArrayList的消息正文编写器。

  • 我是java函数编程的新手,不知道如何编写代码来避免(例如)此操作中的NPE: 我在这里的目的是在列表中查找最新对象的时间戳。关于如何更好地收集最后一个元素的建议非常受欢迎,但我在这里的主要问题实际上是为什么这有效。 文档显示,如果归约的结果为空,该函数将抛出< code > NullPointerException : http://docs . Oracle . com/javase/8/do

  • 为简单起见,我有2个字符串列表,我需要将字符串连接到一个列表中并创建另一个列表。例如—— 我想要输出为 我可以使用正则for循环来实现这一点。但不知道如何继续使用java8 我试图让自己思考nJava8:-)

  • 我有一个div元素,如下所示。 我使用以下xpath标识此元素。 Selenium标识此元素并加载WebElement对象。但当我去获取它的文本时,我只得到一个“.”如下所示,而不是获取“购买到付款流程”。我做错了什么?我检查了chrome控制台,没有其他元素匹配这个xpath。 任何帮助都将不胜感激。

  • 给定一组未排序的整数,返回大小为k的所有子集(即每组有k个唯一元素),其总和为0。 所以我给了面试官以下解决方案(我在GeekViewpoint上研究过)。没有使用额外的空间,一切都做到位,等等。但当然成本是O(n^k)的高时间复杂度,其中在解决方案中。 但随后她提出了以下要求: 必须在答案中使用hashmap以降低时间复杂度 必须绝对地为一般情况提供时间复杂度 k=6时的提示,O(n^3) 她对