java - QueryDSL 内连接 : path expected for join

标签 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 实现的。我怎样才能做到这一点?

最佳答案

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

相关文章:

javascript - HTML 中的有向图表示

java - Hibernate拦截器.instantiate()

java - 什么会导致 Hibernate 性能以不确定的方式波动?

java - Hibernate - 如何急切地加载惰性字段?

java - Java Spring中的重载 Controller 方法

java - 在java中使用绝对路径名

java - 如何在 spring-jpa 中使用 @GenerateValue 获取序列中的下一个值

java - Hibernate 更新一对多映射中的子条目

java - 在 JPA、Hibernate 中验证用户名长度的最佳方法

java - 从二叉树中删除未正确表示的叶子