Java QueryDSL内部联接:联接所需的路径

Java QueryDSL内部联接:联接所需的路径,java,hibernate,jpa,querydsl,Java,Hibernate,Jpa,Querydsl,我正在尝试使用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

我正在尝试使用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();
    }
私有列表getAllCardsInvolvedInTransactionsQuery(JPAQuery q){
返回q
.来自(交易)
.innerJoin(卡)
.on(交易.卡.id.eq(卡.id))
.distinct()
.名单(卡片);
//返回entityManager.createNamedQuery(
//“从交易中选择不同的卡作为t.Card.id=c.id上的c作为t内部连接卡”,
//getResultList();
}

注释代码就是我试图用QueryDSL实现的。如何实现这一点?

您应该在querydsl语句中添加路径和别名

QCard card = new QCard("card");
return q
    .from(transaction)
    .innerJoin(transaction.card, card)
    .distinct()
    .list(card);
如文件规定,见第2.1.7章

或者,我认为可以用更简洁的方式编写查询,如下所示

return q
    .from(transaction)
    .innerJoin(transaction.card)
    .distinct()
    .list(transaction.card)

您应该在querydsl语句中添加路径和别名

QCard card = new QCard("card");
return q
    .from(transaction)
    .innerJoin(transaction.card, card)
    .distinct()
    .list(card);
如文件规定,见第2.1.7章

或者,我认为可以用更简洁的方式编写查询,如下所示

return q
    .from(transaction)
    .innerJoin(transaction.card)
    .distinct()
    .list(transaction.card)