hibernate hql sum случай, когда тогда еще заканчивают выполнение в проблеме java - PullRequest
0 голосов
/ 11 сентября 2018

Мне нужно выполнить HQL query с суммой, а затем предложение конца в Java , которое без проблем запускается в postgres:

SELECT r.reviewer_id,
  sum(case when c.service_type = 'مالتی مدیا' AND c.genre_id = '66c92962-324c-11e7-93ae-92361f002671' then 1 else 0 end) image_multimedia,
  sum(case when c.service_type is null AND c.genre_id = '66c92b1a-324c-11e7-93ae-92361f002671' then 1 else 0 end) image_null

 FROM module_samim.content c
  Join module_samim.content_reviewer r on c.id = r.content_id
  Join module_samim.file f on f.id = c.file_id
  Group by r.reviewer_id

Я пытался запустить его с createQuery(), но получаю:

Sep 11, 2018 8:57:20 AM org.hibernate.hql.internal.ast.ErrorCounter reportError
ERROR: line 1:58: expecting "then", found 'مدیاAND'
line 1:58: expecting "then", found 'مدیاAND'
and

Sep 11, 2018 8:57:20 AM org.hibernate.hql.internal.ast.ErrorCounter reportError
ERROR: line 1:264: unexpected token: image_null
Sep 11, 2018 8:57:20 AM org.hibernate.hql.internal.ast.ErrorCounter reportError
ERROR: line 1:264: unexpected token: image_null
line 1:264: unexpected token: image_null

пожалуйста, помогите мне! спасибо!

Ответы [ 3 ]

0 голосов
/ 12 сентября 2018

Я нашел решение :)) Я использовал createNativeQuery() и @SqlResultSetMapping, описанные в по этой ссылке , чтобы полностью решить мою проблему

0 голосов
/ 12 сентября 2018

Кажется, что вы смешиваете использование собственного запроса с HQL / JPQL createQuery API

Просто чтобы прояснить это для вас, есть три различных способа, которыми мы можем создать SQL-запрос в Hibernate:

   1) session.createQuery()             //Hibernate APi
   2) entityManager.createQuery()       //JPA Api

   3) session.createSQLQuery()          // **** Hibernate API ****
   4) entityManager.createNativeQuery() //JPA API
  • Так что, если вы используете Hibernate, вы должны использовать session.createSQLQuery (), а если вы используете JPA, вы должны использовать entityManager.createNativeQuery ()
0 голосов
/ 11 сентября 2018

Синтаксис выглядит как SQL, а не HQL.

Поэтому вместо этого

createQuery()

нам нужно назвать это

createSqlQuery()
...