首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PostgreSQL查询在pgAdmin中工作,但在EclipseLink中不起作用。

问PostgreSQL查询在pgAdmin中工作,但在EclipseLink中不起作用。
EN

Stack Overflow用户
提问于 2016-03-01 12:24:49
回答 2查看 1.1K关注 0票数 3

我有一个SQL,它可以计算每个日期截断(月、天、小时)的行数。想一想历史图表。如果在pgAdmin中执行查询,则查询工作良好,但在使用EclipseLink的Java中会失败。

pgAdmin查询:

代码语言:javascript
复制
SELECT date_trunc( 'hour', delivered_at ),
       COUNT(date_trunc( 'hour', delivered_at )) AS num 
FROM messages 
WHERE channel_type='EMAIL' 
  AND created_at>='2016-02-28 16:01:08.882' 
  AND created_at<='2016-02-29 16:01:08.882' 
GROUP BY date_trunc( 'hour', delivered_at );

JPQL命名查询

代码语言:javascript
复制
SELECT FUNCTION('date_trunc', 'hour', m.deliveredAt ),
       COUNT(FUNCTION('date_trunc', 'hour', m.deliveredAt )) AS num 
 FROM Message m 
 WHERE m.channelType = :channelType 
   AND m.createdAt >= :fromDate 
   AND m.createdAt <= :toDate 
 GROUP BY FUNCTION('date_trunc', 'hour', m.deliveredAt )

EclipseLink调试日志:

代码语言:javascript
复制
SELECT date_trunc(?, delivered_at), COUNT(date_trunc(?, delivered_at)) FROM messages 
WHERE (((channel_type = ?) AND (created_at >= ?)) AND (created_at <= ?)) GROUP BY date_trunc(?, delivered_at)
bind => [hour, hour, EMAIL, 2015-12-27 00:00:00.0, 2015-12-27 00:00:00.0, hour]

错误:

错误:列"messages.delivered_at“必须出现在GROUP子句中,或用于聚合函数位置: 23

PostgreSQL日志:

2016-03-01 13:22:08 CET错误:"messages.delivered_at“列必须出现在GROUP子句中,或用于字符23 2016-03-01 13:22:08 CET语句中的聚合函数中:选择date_trunc($1,delivered_at),计数(Delivered_at)从消息WHERE ((channel_type= $2)和(created_at >= $3))和(created_at <= $4)按date_trunc分组($5,( delivered_at) 2016-03-01 13:22:08 CET日志:执行S_2:选择1

如果我替换EclipseLink日志查询中的绑定变量并在pgAdmin中执行该查询,则查询工作正常。这里发生什么事情?

编辑:只是为了澄清,它也使用em.createNativeQuery工作。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-03-01 17:31:24

PostgreSQL可以具有解析参数绑定的麻烦,在本例中,这种绑定显示为具有内联工作参数的原生SQL,而JPA生成的默认绑定参数的SQL失败。

一种解决方案是关闭参数绑定,方法是将值为"false“的“eclipselink.jdbc.bind-参数”作为特定查询的查询提示传递,或者作为持久性单元属性,默认情况下关闭所有查询的参数绑定。

票数 1
EN

Stack Overflow用户

发布于 2016-03-01 12:30:12

在postgresql上,可以使用以下语法

代码语言:javascript
复制
GROUP BY 1

这意味着您将使用SELECT子句中的第一个选定属性对您进行分组。在那里可能会有帮助

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35722890

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档