使用 COUNT (DISTINCT obj) 生成 JPA 本机查询

发布于 2024-10-07 03:26:06 字数 988 浏览 3 评论 0原文

请帮助我在 OpenJPA 1.2.x 上进行 JPQL 查询 这是我的查询文本:

从事件中选择计数(不同事件) evt WHERE (evt.beginDate >= :startOfPeriod 和 evt.beginDate <= :endOfPeriod) 按 evt.beginDate 排序 上升

在运行时我收到一个错误:

org.apache.openjpa.persistence.ArgumentException: DB2 SQL 错误:SQLCODE=-119, SQLSTATE=42803,SQLERRMC=BEGIN_DATE, 驱动程序=3.59.81 {prepstmnt 1520523937 选择计数(不同的 t0.ID), t0.BEGIN_DATE 来自公司.事件 t0 WHERE (t0.BEGIN_DATE >= ? AND t0.BEGIN_DATE <= ?) 优化 1 行 [参数=(时间戳)2010-12-14 00:00:00.0,(时间戳)2010-12-14 23:59:59.999]} [代码=-119, 状态=42803]

为什么 JPA 在 select 子句中打印字段 t0.BEGIN_DATE? 为什么 JPA 会错过本机 SQL 中的 ORDER BY 子句? 例如,此查询(在 select 子句中没有 t0.BEGIN_DATE)是有效的:

SELECT COUNT(DISTINCT t0.ID) 
    FROM CALENDAR.EVENT t0
    WHERE (t0.BEGIN_DATE >= null AND t0.BEGIN_DATE <= null)

我已设置 null 只是为了成功执行 SQL 查询

这是某种错误吗?

please help me with JPQL Query on OpenJPA 1.2.x
Here is the text of my query:

select count (distinct evt) from Event
evt WHERE (evt.beginDate >=
:startOfPeriod and evt.beginDate <=
:endOfPeriod) ORDER BY evt.beginDate
asc

At runtime I get an error:

org.apache.openjpa.persistence.ArgumentException:
DB2 SQL Error: SQLCODE=-119,
SQLSTATE=42803 , SQLERRMC=BEGIN_DATE,
DRIVER=3.59.81 {prepstmnt 1520523937
SELECT COUNT(DISTINCT t0.ID),
t0.BEGIN_DATE
FROM COMPANY.EVENT t0
WHERE (t0.BEGIN_DATE >= ? AND t0.BEGIN_DATE <= ?) optimize for 1 row
[params=(Timestamp) 2010-12-14
00:00:00.0, (Timestamp) 2010-12-14
23:59:59.999]} [code=-119,
state=42803]

Why does JPA prints field t0.BEGIN_DATE in select clause?
Why did JPA miss ORDER BY clause in native SQL?
For example, this query (without t0.BEGIN_DATE in select clause) is valid:

SELECT COUNT(DISTINCT t0.ID) 
    FROM CALENDAR.EVENT t0
    WHERE (t0.BEGIN_DATE >= null AND t0.BEGIN_DATE <= null)

I've set null just for successful SQL query execution

Is it a some kind of a bug?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

春风十里 2024-10-14 03:26:06

哦,伙计...只需删除“ORDER BY evt.beginDate asc”即可。
太蠢了。我确实数过,我不需要按...
问题已经被我自己解决了。抱歉打扰了。

Oh, man... just delete "ORDER BY evt.beginDate asc".
So stupid. I do count, I don't need order by...
Problem has been solved by myself. Excuse me for disturbing.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文