2

我需要执行一个HQL querywith sum when then else end 子句在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

请帮我!谢谢你!

4

3 回答 3

0

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

因此,我们需要代替这个

createQuery()

叫那个

createSqlQuery()
于 2018-09-11T05:14:40.137 回答
0

我找到了解决方案:))我使用并在此链接createNativeQuery()中解释了@SqlResultSetMapping 来完全解决我的问题

于 2018-09-12T11:22:13.487 回答
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()
于 2018-09-12T12:04:19.037 回答