【问题标题】:QueryDSL: expecting CLOSE, found '('QueryDSL:期待关闭,发现 '('
【发布时间】:2016-09-15 14:39:41
【问题描述】:

以下 QueryDSL 代码有什么问题:

query.from(chat).where(
chat.datePosted.goe(startDate.atStartOfDay()).
and(chat.datePosted.lt(endDate.plusDays(1).atStartOfDay()))).    
groupBy(date(chat.datePosted)).
list(date(chat.datePosted), date(chat.datePosted).count());

我得到这样的异常:

Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: expecting CLOSE, found '(' near line 1, column 41 [select date(chat.datePosted), count(date(chat.datePosted))
from com.test.model.Chat chat
where chat.datePosted >= ?1 and chat.datePosted < ?2
group by date(chat.datePosted)]

?

我正在使用 Spring Boot 1.3.6 和 QueryDSL 3.7.4(JPA 通过 Hibernate)。

【问题讨论】:

  • 似乎与 this question 有关,但我不相信 hibernate 无法解析如此简单的查询。
  • 看起来问题出在 endDate.plusDays(1).atStartOfDay() 周围 - 也许先尝试计算然后传入值?
  • DATE 不是有效的 JPQL 函数。任何 JPQL 参考资料都会告诉您这一点
  • 你可能是对的,但我也尝试过 queryDSL 本身支持的普通旧“concat”(或 StringExpression 附加),这也不起作用,所以根本原因是别的。
  • @JohnHarris 不,最终效果很好,请参阅答案。

标签: java hibernate jpa querydsl


【解决方案1】:

我可能拒绝它看起来using functions as arguments in hibernate aggregation functions 被禁止,例如:count(date(field)) 不适用于Hibernate。太可惜了!

在我的情况下,只需删除对 count() 下另一个函数的任何调用就可以解决问题,因为结果是相同的。似乎是一个 Hibernate 实现问题,因为 Timo 在相关问题上提到这在 EclipseLink 下有效。

【讨论】:

    猜你喜欢
    • 2019-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-18
    • 2019-11-30
    • 2017-11-19
    • 1970-01-01
    • 2012-12-31
    相关资源
    最近更新 更多