2015-10-21 2 views
0
IF (((SELECT COUNT(*) FROM com.abc.domain.dcm.Program AS p 
        INNER JOIN p.programServiceLevelConfigs AS pslc 
        INNER JOIN pslc.taskPackages AS taskPackages 
        WHERE taskPackages.id = :taskPackageId) > 0) OR 
      ((SELECT COUNT(*) from com.abc.domain.dcm.HcsEnrollmentBhpSetup hbs 
        INNER JOIN hbs.taskPackageMap 
        WHERE elements(hbs.taskPackageMap.id) = :taskPackageId) > 0)) 
     SELECT 1 
    ELSE 
     SELECT 0 

Я устанавливаю параметр запроса:java.lang.IllegalArgumentException: org.hibernate.QueryParameterException: не удалось найти именованный параметр [taskPackageId]

query.setParameter("taskPackageId", taskPackageId); 

Исполняя выше HQL Query, я получаю после исключения stacktrace:

java.lang.IllegalArgumentException: org.hibernate.QueryParameterException: could not locate named parameter [taskPackageId] 
at org.hibernate.ejb.QueryImpl.setParameter(QueryImpl.java:379) 
at org.hibernate.ejb.QueryImpl.setParameter(QueryImpl.java:72) 

Любая помощь очень ценится.

+0

Вы можете показать весь код? –

+0

Это все соответствующий код. Мой HQL встроен в xml-файл. – pshirodkar

ответ

0

Вы не можете использовать оператор if...else в HQL. Может быть CASE expression поможет вам.

+0

Вы правы. Даже UNION пока не поддерживается в HQL https://hibernate.atlassian.net/browse/HHH-1050. Выражение CASE не было полезным с учетом моих требований. – pshirodkar

Смежные вопросы