сложный запрос к эквивалентному запросу построителя критериев (EntityManager)

Мой запрос таков:

query1 = выберите a.id из entity1 a, где a.id в (:List1)
и не существует (выберите ex2 из entity2 ex2, где ex2.assignedId = a.id)
union
select ex.assignedId из entity2 ex ,entity3 pi
, где ex.entity3Id = pi.id и ex.assignedId в (:List1)
и ex.assignedTypeId = :assignedTypeId и pi.processStatus = :status
и не существует
(выберите ex1.assignedId из entity2 ex1 , entity3 pi1
где ex1.entity3Id = pi1.id и ex1.assignedId = ex.assignedId
и ex1.assignedTypeId = :assignedTypeId
и pi1 .processStatus ‹> :status);

и при попытке выполнить запрос,

Запрос существующих идентификаторов = em.createQuery (запрос1); //Со всеми заданными параметрами

выдает NullPointerException в строке 87 файла org.hibernate.hql.ast.ParameterTranslationsImpl

полностью проверил все брекеты и параметры. Эквивалентное преобразование работает в mysql. Может ли кто-нибудь помочь мне преобразовать запрос с помощью CriteriaBuilder, если мне трудно выполнить преобразование.


person techie2k    schedule 06.08.2012    source источник


Ответы (1)


Не уверен, что JPQL вообще поддерживает операцию объединения. Вы ставите это как NamedQuery или создаете на лету (entityManager.createQuery())?

person Chris    schedule 06.08.2012
comment
Это entityManager.createQuery() с 'Query fetchIds=em.createQuery(query1); fetchIds.setParameter (list1, listValues); fetchIds.setParameter (assignTypeId, 15); fetchIds.setParameter(статус, 4);' - person techie2k; 06.08.2012
comment
Как я уже сказал, формируемый запрос неверен. Используйте соединения вместо внутренних выборок. Используйте условия ИЛИ в том же предложении where вместо операции Union. Пожалуйста, просмотрите документацию JPQL, которую я упомянул в комментарии. - person Chris; 06.08.2012
comment
Нет, мне нужно добавить набор результатов, поэтому я использую union. - person techie2k; 06.08.2012