Java Jooq中的一对多选择
我正在试用JOOQ,并尝试使用join语句从3个表(Author、Books和Articles)中进行选择。ERD如下所示:Java Jooq中的一对多选择,java,mysql,one-to-many,jooq,Java,Mysql,One To Many,Jooq,我正在试用JOOQ,并尝试使用join语句从3个表(Author、Books和Articles)中进行选择。ERD如下所示: Author ----< Books | | ^ Articles message Author { int64 id = 1; string name = 2; repeated string books = 3; repeated string articles = 4; } (或与此相关的任何其他pojo)
Author ----< Books
|
|
^
Articles
message Author {
int64 id = 1;
string name = 2;
repeated string books = 3;
repeated string articles = 4;
}
(或与此相关的任何其他pojo)将所有实体(作者详细信息+书籍列表+文章列表)保存到一个对象中。我的问题是,是否有某种方法可以使用JOOQ将所有三个表映射到一个对象中
提前感谢。使用JOIN
对此不起作用。
您的查询将非常低效,因为如果您以这种方式使用联接,您将在books和articles表之间创建一个连接,从而在消除所有无意义的组合之前,在数据库和Java客户机中消耗相当多的内存和CPU
“正确”的SQL方法是使用。不幸的是,(许多数据库也不例外)。因此,您应该创建两个单独的查询:
List您能再描述一下所需的结果类型吗(我不知道protobuf)。重复字符串
是否类似于逗号分隔的串联字符串,如“book1,book2,…,bookN”
?还是更像一个数组?谢谢@LukasEder,从protobuf生成的author类将有一个书籍/文章列表的getter。如果你想了解更多关于protobuf的信息,可以看一看。因此,在理想情况下,连接查询会给我一个protobufautor或List。实际上,我们最终按照下面的建议做了一些事情。非常感谢你的帮助!谢谢你的反馈。很高兴知道。你介意在你自己的回答中说明你做了什么吗?(可以自己回答关于堆栈溢出的问题)。我很想知道你是怎么做到的。
message Author {
int64 id = 1;
string name = 2;
repeated string books = 3;
repeated string articles = 4;
}