组合联接从两个表返回数据

问题描述 投票:0回答:1

我正在学习 QueryDSL,有一个基本问题。我正在尝试连接两个表并从两个表中选择数据。

在我的示例中,我有一个 Member 表和 Book 表。 Book有一个外键memberId返回member.id。 (将其视为拥有书籍的人。)

在 SQL 中,我可能会这样做:

SELECT member.name, book.title FROM member, book WHERE book.member_id = member.id;

我正在尝试从 QueryDSL 做同样的事情。这是我的代码,显然是错误的:

List<Tuple> results = queryFactory
        .selectFrom(member)
        .innerJoin(member.books, book)
        .select(member.id, member.name, book.name)
        .fetchJoin()
        .fetch();

我收到此错误:

org.hibernate.query.SemanticException:查询指定连接抓取, 但所获取关联的所有者并不存在于选择中 列表 [SqmListJoin (成员(member1).books(book))]

我找到的所有示例都展示了如何进行联接以过滤结果。例如,Books 与member 结合,根据member.name 获取书籍。但他们只归还书籍,而不是合并连接。

java querydsl
1个回答
0
投票

看起来您很接近,但您使用了

.select()
两次,这导致了问题。在 QueryDSL 中,当您使用
fetchJoin()
时,它期望所获取关联的所有者出现在选择列表中。您可以尝试以下方法解决此问题:

List<Tuple> results = queryFactory
        .select(member.id, member.name, book.title) // Include book.title in the select list
        .from(member)
        .innerJoin(member.books, book)
        .fetchJoin()
        .fetch();
© www.soinside.com 2019 - 2024. All rights reserved.