сложный запрос к эквивалентному запросу построителя критериев (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)


arrow_upward
0
arrow_downward

Не уверен, что 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