我尝试在 QueryDSL 中使用内部联接语法创建一个简单的查询,但它始终失败并出现以下错误:
Caused by: java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: Path expected for join! [select distinct card
from com.db.entities.Transaction transaction
inner join Card card with transaction.card.id = card.id]
我正在使用的查询是这样的。
private List<Card> getAllCardsInvolvedInTransactionsQuery(JPAQuery q) {
return q
.from(transaction)
.innerJoin(card)
.on(transaction.card.id.eq(card.id))
.distinct()
.list(card);
// return entityManager.createNamedQuery(
// "SELECT DISTINCT Card FROM Transaction AS t INNER JOIN Card AS c ON t.card.id=c.id",
// Card.class).getResultList();
}
注释的代码是我试图用 QueryDSL 实现的。我怎样才能做到这一点?
最佳答案
您应该在 querydsl 语句中使用路径和别名。
QCard card = new QCard("card");
return q
.from(transaction)
.innerJoin(transaction.card, card)
.distinct()
.list(card);
如文档中所述 - http://www.querydsl.com/static/querydsl/latest/reference/html/ch02.html ,参见第 2.1.7 章。
或者,我认为可以以更简洁的方式编写查询,就像这样
return q
.from(transaction)
.innerJoin(transaction.card)
.distinct()
.list(transaction.card)
关于java - QueryDSL 内连接 : path expected for join,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54763411/