私はJOOQを試していて、結合ステートメントを使用して3つのテーブル(著者、書籍、記事)から選択しようとしています。次のようにERDは次のとおりです。Jooqで1対多選択
Author ----< Books
|
|
^
Articles
私が持っているクエリは以下の通りです:
message Author {
int64 id = 1;
string name = 2;
repeated string books = 3;
repeated string articles = 4;
}
(またはのために他のPOJOを次のように私もいるProtobufオブジェクトを持っている
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)));
すべての実体(著者の詳細+書籍のリスト+記事のリスト)を1つのオブジェクトに保持することになります。私の質問は、JOOQを使用して1つのオブジェクトに3つのテーブルすべてをマップする方法があるかどうかです。
ありがとうございます。
希望の結果のタイプをもう少し詳しく説明できますか(私はprotobufを知らない)。 '繰り返し文字列'は、 '' book1、book2、...、bookN "'のようなコンマ区切りの連結文字列のようですか?それとももっと配列に似ていますか? –
ありがとう@LukasEder protobufから生成された著者クラスは、書籍/記事のリストにゲッターを持っています。 protobufについてもっと知りたい場合は、[こちら](https://developers.google.com/protocol-buffers/docs/javatutorial)をご覧ください。理想的なケースでは、結合クエリは私にProtobufAuthorまたはListを与えます。 実際には、以下に示唆したように何かをしました。ご助力ありがとうございます! –
フィードバックいただきありがとうございます。知っておくといい。あなたは自分の答えで何をしたかを見せてもらえますか? (Stack Overflowに関する自分の質問に答えることはまったく問題ありません)。私はあなたがそれをどうやって行ったのかとても興味があります。 –