hibernate hql sum case when then else end execution in java 问题

hibernate hql sum case when then else end execution in java problem

我需要用 sum when then else end 子句执行 HQL query Java 运行 在 [= 中没有问题14=]:

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

请帮帮我! 谢谢!

语法好像是SQL,不是HQL。

因此,我们需要的不是这个

createQuery()

称之为

createSqlQuery()

我找到了解决方案:)) 我使用 createNativeQuery() 中解释的@SqlResultSetMapping 完全解决了我的问题

您似乎将本机查询的用法与 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
  • So if you are using Hibernate, you should user session.createSQLQuery() and if you are using JPA you should use entityManager.createNativeQuery()