Неожиданный токен: (подзапрос hql
Вот мой HQL-запрос
FROM com.mysite.ActeurInterne act WHERE act.acteurId IN
(SELECT DISTINCT COALESCE(acteurInterne.acteurInternePrincipalId, acteurInterne.acteurId)
FROM
(SELECT DISTINCT acteurInterne
FROM com.mysite.ActeurInterne AS acteurInterne
JOIN acteurInterne.roleSet.roles AS role
WHERE acteurInterne.acteurId = acteurInterne.acteurId
AND acteurInterne.nom LIKE :likenom
AND (role.dateFermeture IS NULL
OR role.dateFermeture >= TRUNC(SYSDATE))
AND (role.dateOuverture IS NULL
OR role.dateOuverture <= TRUNC(SYSDATE))
AND (role.type = :type
OR role.type = :typeC)
)
)
я получил
org.hibernate.hql.ast.QuerySyntaxException: unexpected token: ( near line 1, column 190
который является "(" в начале четвертой строки выше.
( ВЫБЕРИТЕ DISTINCT acteurInterne
1 ответ
Решение
В документации Hibernate говорится, что подзапросы разрешены только в предложении SELECT или WHERE.
Обратите внимание, что подзапросы HQL могут встречаться только в предложениях select или where.
Но в приведенном выше примере у вас есть подзапрос в предложении FROM первого подзапроса.
Вы пытались объединить 2 подзапроса в один?
FROM com.mysite.ActeurInterne act WHERE act.acteurId IN
(SELECT DISTINCT COALESCE(acteurInterne.acteurInternePrincipalId, acteurInterne.acteurId)
FROM com.mysite.ActeurInterne AS acteurInterne
JOIN acteurInterne.roleSet.roles AS role
WHERE acteurInterne.acteurId = acteurInterne.acteurId
AND acteurInterne.nom LIKE :likenom
AND (role.dateFermeture IS NULL
OR role.dateFermeture >= TRUNC(SYSDATE))
AND (role.dateOuverture IS NULL
OR role.dateOuverture <= TRUNC(SYSDATE))
AND (role.type = :type
OR role.type = :typeC)
)