jOOQ fetchGroups 不会为一对多关系返回空集合

kco*_*123 5 java sql jooq

我有以下一对多关系的查询。

return create.select(Parent.asterisk(), Child.asterisk())
    .from(PARENT)
    .leftJoin(CHILD)
    .onKey()
    .where(myCondition)
    .fetchGroups(ParentRecord.class, ChildRecord.class);
Run Code Online (Sandbox Code Playgroud)

当没有子记录时,我不会得到空列表。始终有一个子记录的所有字段都设置为空。

[Child(id=null, name=null)]
Run Code Online (Sandbox Code Playgroud)

防止返回这些空记录的最佳方法是什么?

Luk*_*der 4

这是一个流行的用例,因此我在此处发布了关于 jOOQ API 的这一部分的博客。

您可以使用自己的收集器:

Map<ParentRecord, List<ChildRecord>> result =
create.select(PARENT.asterisk(), CHILD.asterisk())
    .from(PARENT)
    .leftJoin(CHILD).onKey()
    .where(myCondition)
    .collect(groupingBy(
        r -> r.into(PARENT), filtering(
            r -> r.get(CHILD.ID) != null, mapping(
                r -> r.into(CHILD), toList()
            )
        )
    ));
Run Code Online (Sandbox Code Playgroud)

我假设这些静态导入:

import static java.util.stream.Collectors.*;
import static org.jooq.impl.DSL.*;
import static com.example.generated.Tables.*;
Run Code Online (Sandbox Code Playgroud)

这是一个常见的问题。改进当前的 API 可能是有意义的:https ://github.com/jOOQ/jOOQ/issues/11888