java 在JOOQ中获取按外部字段分组的POJO

cs7cruho  于 2023-06-04  发布在  Java
关注(0)|答案(1)|浏览(154)

以多对多(book_author)关系中的bookauthor表为例。
我现在有这个,它的工作原理:

Map<UUID, List<Book>> booksByAuthorId = dsl
    .select(BOOK_AUTHOR.AUTHOR_ID, BOOK_AUTHOR.book())
    .from(BOOK_AUTHOR)
    .where(BOOK_AUTHOR.AUTHOR_ID.in(authorIds))
    .fetchGroups(
        BOOK_AUTHOR.AUTHOR_ID,
        mapping((a, bookRecord) -> mapping(Book::new).apply(bookRecord)));

但是嵌套的mapping让我觉得我做错了什么。这真的是最明显的方法吗?

tcomlyy6

tcomlyy61#

你能做到的吧?

.fetchGroups(
    BOOK_AUTHOR.AUTHOR_ID,
    r -> r.value2().into(Book.class)
);

或者这个:

.fetchGroups(
    r -> r.value1(),
    r -> r.value2().into(Book.class)
);

它使用反射(在DefaultRecordMapper中)将嵌套BOOK_AUTHOR.book()记录的book列Map到BookPOJO。如果你在代码生成器中启用了<recordsImplementingRecordN/>标志,你可以在查询中这样做:

BOOK_AUTHOR.book().mapping(Book::new)

也许还有其他的方法来“改善”事情,尽管正如我在评论中所说,这似乎是主观的。或者,您正在寻找一个可以添加到jOOQ API的 * 特定 * 操作符?You could request it here

相关问题