休眠hql总和情况,然后否则在java问题中结束执行

时间:2018-09-11 04:33:45

标签: java sql hibernate hql createquery

Java 中的else end子句在HQL query中运行没有问题时,我需要用sum执行一个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 :(得分:0)

语法似乎是SQL,而不是HQL。

因此,我们需要代替它

createQuery()

打电话给

createSqlQuery()

答案 1 :(得分:0)

我找到了解决方案:)) 我使用this link中介绍的createNativeQuery()和@SqlResultSetMapping完全解决了我的问题

答案 2 :(得分:0)

似乎您在通过HQL / JPQL createQuery API混合使用本机查询

只是为您澄清一下,我们可以使用三种不同的方法在Hibernate中创建SQL查询:

   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()
  •