我有以下数据库表:
catalog
- author
- book_name
- publication_date
catalog
表中的值看起来像
作者 | 书名 | 出版日期 |
---|---|---|
马克·史密斯 | 如何阅读 | 2024-01-01 |
莎拉·多伊 | 一本书 | 1826-01-01 |
莎拉·多伊 | 第二本书 | 1855-07-15 |
我想将表提取到与此类似的
Catalog
POJO 中:
public class Catalog {
private String author;
List < BookEntry > book_entries;
}
public class BookEntry {
private String bookName;
private Date publicationDate;
}
我使用了多重集(https://www.jooq.org/doc/latest/manual/sql-building/column-expressions/multiset-value-constructor/)运算符在不同的表中执行类似的操作,但是我不知道它是否适合这个特定的用例。
MULTISET_AGG()
,在这种情况下:
ctx.select(CATALOG.AUTHOR,
multisetAgg(CATALOG.BOOK_NAME, CATALOG.PUBLICATION_DATE)
.convertFrom(r -> r.map(Records.mapping(BookEntry::new))))
.from(CATALOG)
.groupBy(CATALOG.AUTHOR)
.fetch(Records.mapping(Catalog::new))
当然,假设您在这些类上有适当的构造函数,并且您可以处理不规范化此模式的危险。