Внутреннее соединение QueryDSL: ожидаемый путь для соединения - PullRequest
0 голосов
/ 19 февраля 2019

Я пытаюсь создать простой запрос с синтаксисом внутреннего соединения в 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 голосов
/ 05 марта 2019

Вы должны указывать пути и псевдонимы в операторах 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)
...