I need to execute a HQL query
with sum when then else end clause in Java that run with no problem in 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
I tried to run it with createQuery()
but I get :
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
please help me! thank you!
The syntax seems to be a SQL, not HQL.
Therefore, we need instead of this
createQuery()
to call that
createSqlQuery()
我找到了解决方案:))我使用createNativeQuery()
和createNativeQuery()
在此链接中解释完全解决我的问题
It seems that you are mixing the usage of native query over HQL/JPQL createQuery API
Just to clarify it for you, there are three different ways we can create a SQL query in Hibernate:
1) session.createQuery() //Hibernate APi
2) entityManager.createQuery() //JPA Api
3) session.createSQLQuery() // **** Hibernate API ****
4) entityManager.createNativeQuery() //JPA API
- So if you are using Hibernate, you should user session.createSQLQuery() and if you are using JPA you should use entityManager.createNativeQuery()
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.