当前位置: 首页 > 知识库问答 >
问题:

如何在Date Spring查询DSL中计算不同的年份?

闻人嘉颖
2023-03-14

当我通过此查询计算日期中的不同年份时

List count = queryFactory.select(qTestEntity.createdDate.year().countDistinct()).from(qTestEntity)
                .fetch();

这给了我一个错误

java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: expecting CLOSE, found '(' near line 1, column 27 [select count(distinct year(testEntity.createdDate))
from  testEntity]
    at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:138) ~[hibernate-core-5.4.21.Final.jar:5.4.21.Final]
    at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:181) ~[hibernate-core-5.4.21.Final.jar:5.4.21.Final]
    at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:188) ~[hibernate-core-5.4.21.Final.jar:5.4.21.Final]
    at org.hibernate.internal.AbstractSharedSessionContract.createQuery(AbstractSharedSessionContract.java:725) ~[hibernate-core-5.4.21.Final.jar:5.4.21.Final]
    at org.hibernate.internal.AbstractSharedSessionContract.createQuery(AbstractSharedSessionContract.java:113) ~[hibernate-core-5.4.21.Final.jar:5.4.21.Final]
    at jdk.internal.reflect.GeneratedMethodAccessor184.invoke(Unknown Source) ~[na:na]
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
    at java.base/java.lang.reflect.Method.invoke(Method.java:564) ~[na:na]
    at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:314) ~[spring-orm-5.2.9.RELEASE.jar:5.2.9.RELEASE]
    at com.sun.proxy.$Proxy111.createQuery(Unknown Source) ~[na:na]
    at com.querydsl.jpa.impl.AbstractJPAQuery.createQuery(AbstractJPAQuery.java:101) ~[querydsl-jpa-4.3.1.jar:na]
    at com.querydsl.jpa.impl.AbstractJPAQuery.createQuery(AbstractJPAQuery.java:94) ~[querydsl-jpa-4.3.1.jar:na]
    at com.querydsl.jpa.impl.AbstractJPAQuery.fetch(AbstractJPAQuery.java:201)
    

经过调查,我发现了一个问题:-spring JPA@查询错误,应为CLOSE,在附近找到“(”

是否有任何解决方法可以在没有本机查询的情况下获得不同的年份?

共有1个答案

牛凌
2023-03-14

Hibernate中并不支持所有日期提取功能,因为Hibernate中没有现成的日期提取功能。此外,Hibernate似乎不支持对函数或参数化表达式执行计数不同的操作。

您可以考虑Blaze Persistence Querydsl集成,它提供了更高级的聚合和日期提取函数来Hibernate。

 类似资料:
  • 我正在SpringBootAPI中使用mongoDb进行分页搜索。 对于客户搜索路径,我正在构建一个查询,根据用户输入使用一系列条件。然后我进行计数以显示结果总数(以及计算出的关联页面数) 然后我做分页查询只返回当前页面结果 这一切工作得很好。现在在我的总结果上,我经常有相同用户的多个结果,我想显示分页列表中的那些,但我也想显示一个新的计数器,其中包含搜索中的总不同用户。 我看到了发现。不同的参数

  • 问题内容: 我需要在一个查询中计算两列中某些数据的出现总数。数据库位于SQL Server 2005中。 例如,我有此表: 我需要查询一个结果: 1.名为“约翰”的人数 2.年龄超过30岁的“约翰”的人数。 我可以通过这种方式对子查询进行操作(这只是示例): 但这非常慢,我正在寻找更快的方法。 与使用子查询相比,您是否知道一种更好的方法来计算一个查询中的少量计数? 问题答案: 使用CASE语句,您

  • 需要实现sql查询,如: 如何使用QueryDSL编写这样的语句?(我没有使用任何JPA)。任何帮助/提示都非常感谢!

  • 大家好, 我在Elastic/Kibana有点问题。在Kibana查询语言“KQL”中,我可以执行某个查询: 我想使用ElasticsSearch查询DSL将其用作过滤查询。只是我没有得到同样的结果。为此,我使用布尔运算符。我的查询如下所示: 不幸的是,我没有得到相同的结果。我的猜测是“应该”运算符。但是我不知道如何准确地调整代码。 如果有任何答案,我将不胜感激!多谢!

  • 我有dsl查询需要返回 国家所有者是词典列表 地区所有者是词典列表 需要检查id在字典中位置 下面的查询返回,但我需要操作

  • 问题内容: 我想从Oracle表的DOB(出生日期)字段中计算当前的人的年龄。 DOB字段的数据类型为varchar,其日期以“ DD-MON-YY”格式存储。 当我从日期算起一个人的当前年龄时,查询将返回负数。另外,我观察到,如果日期为13到49年,则结果为负。 例子 查询执行以供参考 任何帮助表示赞赏! 问题答案: 为了解决21世纪的问题,只需稍微修改@the_silk的答案即可: 请注意,尽