Несколько внутренних объединений в JPQL - PullRequest
0 голосов
/ 22 мая 2018

Я пытаюсь написать запрос jpql, но получаю исключение,

Причина: org.hibernate.hql.internal.ast.QuerySyntaxException: неожиданный токен: * около строки1, столбец 8 [SELECT * FROM com.highpeak.tlp.datastore.model.TaskRequestModel trm внутреннее соединение trm.task t внутреннее соединение trm.task.matterId m внутреннее соединение trm.task.matterId.client c, где trm.isActive равно trueи trm.task.isActive имеет значение true, а trm.task.matterId.isActive имеет значение true, а trm.task.matterId.client.isActive имеет значение trm.requestedFor =: заказ владельца trm.createdAt DESC]

Мой запрос

SELECT * FROM TaskRequestModel trm inner join trm.task t 
inner join trm.task.matterId m inner join trm.task.matterId.client c 
where trm.isActive is true and trm.task.isActive is true and 
trm.task.matterId.isActive is true and 
trm.task.matterId.client.isActive is true trm.requestedFor =:owner 
 order by trm.createdAt DESC"

В чем может быть проблема?

Обновление Я даже пытался

SELECT * FROM TaskRequestModel trm inner join trm.task t inner join 
t.matterId m inner join m.client c where trm.isActive is true and 
t.isActive is true and m.isActive is true and c.isActive is true and 
trm.requestedFor =:owner  order by trm.createdAt DESC

1 Ответ

0 голосов
/ 22 мая 2018

Я не уверен, что is true является допустимым JPQL (это, конечно, не допустимый SQL).Таким образом, вы должны просто указывать столбцы непосредственно в предложении WHERE, если они логические.Помимо этого, вы также пропустили AND в предложении WHERE.Собрав все это вместе и удалив неправильное предложение GROUP BY, вы получите:

SELECT *
FROM TaskRequestModel trm
JOIN trm.task t 
JOIN trm.task.matterId m
JOIN trm.task.matterId.client c 
WHERE
    trm.isActive AND
    trm.task.isActive AND 
    trm.task.matterId.isActive AND
    trm.task.matterId.client.isActive AND
    trm.requestedFor =:owner 
ORDER BY trm.createdAt DESC
...