2013-07-25 2 views
-3
query=entityManager.createQuery(" select a.birthDate from PersonalDetailsDomain a where a.empCode=(select b.empCode from User b where b.userId=?)"); 
    query.setParameter(1,userId); 
    Date dob =(Date)query.getSingleResult(); 

Excetion:спящий режим Исключение при выполнения JPA суб запроса

java.lang.IllegalArgumentException: org.hibernate.QueryException: не удалось разрешить свойство: empCode из: com.erp.hrms.User [выберите .birthDate из com.erp.hrms.newjoinee.PersonalDetailsDomain a где a.empCode = (выберите b.empCode из com.erp.hrms.User b где b.userId =?)]

+1

У вашего объекта «Пользователь» есть свойство «empCode» с геттерами и сеттерами? – mael

+0

Поскольку вы пишете Pure SQL Query, а не HSQL, вам нужно указать имя таблицы, а не имя класса POJO для этой отдельной таблицы. –

+1

. Вы просмотрели эти другие вопросы о jpa & subquries: http://stackoverflow.com/questions/13460235/jpa-2-критерии-использование-в-и-подзапросы http://stackoverflow.com/questions/11187188/jpa-criteria-query-with-subquery http://stackoverflow.com/questions/4662336/subquery -in-select-clause http://stackoverflow.com/questions/4483576/jpa-2-0-criteria-api-subqueries-in-expressions http://stackoverflow.com/questions/7269010/jpa-hibernate-subquery -в-с-п –

ответ

0

Использовать ': userId' вместо of '?' а также использовать метод createSQLQuery для собственных запросов sql.

query=entityManager.createSQLQuery(" select a.birthDate from PersonalDetailsDomain a where a.empCode=(select b.empCode from User b where b.userId= :userId)"); 

query.setParameter("userId", userId); 

Date dob =(Date)query.getSingleResult(); 
0

Уверены ли вы правильно отобразили поле (или относительный аксессор) для User.empCode?
Прикрепить User определение, поможет.

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