Неожиданный токен: (подзапрос 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)
)
Другие вопросы по тегам