【发布时间】:2017-07-29 02:36:25
【问题描述】:
我正在尝试 JOOQ 并尝试使用连接语句从 3 个表(作者、书籍和文章)中进行选择。 ERD如下:
Author ----< Books
|
|
^
Articles
我的查询如下:
final List<Tuple3<AuthorRecord, BooksRecord, ArticlesRecord>> tupleList =
persistenceContext.getDslContext()
.select()
.from(Author.AUTHOR)
.join(Books.BOOKS)
.on(Author.AUTHOR.ID.eq(Books.BOOKS.AUTHOR_ID))
.join(Articles.ARTICLES)
.on(Author.AUTHOR.ID.eq(Articles.ARTICLES.AUTHOR_ID))
.where(Author.AUTHOR.ID.eq(id))
.fetch()
.map(r -> Tuple.tuple(r.into(Author.AUTHOR).into(AuthorRecord.class),
r.into(Books.BOOKS).into(BooksRecord.class),
r.into(Articles.ARTICLES).into(ArticlesRecord.class)));
我还有一个protobuf对象如下:
message Author {
int64 id = 1;
string name = 2;
repeated string books = 3;
repeated string articles = 4;
}
(或任何其他 pojo)将所有实体(作者详细信息 + 书籍列表 + 文章列表)保存到一个对象中。我的问题是,有没有办法使用 JOOQ 将所有三个表都映射到一个对象中。
提前致谢。
【问题讨论】:
-
您能否再描述一下所需的结果类型(我不知道 protobuf)。
repeated string是不是像"book1, book2, ..., bookN"这样的逗号分隔的串联字符串?还是更像一个数组? -
感谢@LukasEder,从 protobuf 生成的作者类将有获取书籍/文章列表的方法。如果您想了解更多有关 protobuf 的信息,可以查看 here。所以在理想情况下,连接查询会给我一个 ProtobufAuthor 或 List
实际上,我们最终按照您在下面的建议做了一些事情。非常感谢您的帮助! -
感谢您的反馈。很高兴知道。你介意在你自己的答案中展示你做了什么吗? (可以在 Stack Overflow 上回答自己的问题)。我很想知道你是怎么做到的。
标签: java mysql one-to-many jooq