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

时间:2019-02-19 09:58:28

标签: 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 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实现的。我该怎么办?

1 个答案:

答案 0 :(得分:0)

您应该在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)