Spring 具有聚合函数的查询方法验证失败
我在Spring中编写了这个查询方法:Spring 具有聚合函数的查询方法验证失败,spring,hibernate,Spring,Hibernate,我在Spring中编写了这个查询方法: @Query("SELECT MAX(TO_NUMBER(ban.codiBanca)) FROM DBanche ban WHERE LENGTH(TRIM(TRANSLATE(ban.codiBanca, '0123456789', ' '))) IS NULL") public BigDecimal getMaxCodiBanca(); codiBanca的字段类型为VARCHAR(20) 启动应用程序时,我获得以下错误: Caused By: j
@Query("SELECT MAX(TO_NUMBER(ban.codiBanca)) FROM DBanche ban WHERE LENGTH(TRIM(TRANSLATE(ban.codiBanca, '0123456789', ' '))) IS NULL")
public BigDecimal getMaxCodiBanca();
codiBanca的字段类型为VARCHAR(20)
启动应用程序时,我获得以下错误:
Caused By: java.lang.IllegalArgumentException: Validation failed for query for method public abstract java.math.BigDecimal it.gov.mef.efim.dao.repository.base.BancaDao.getMaxCodiBanca()!
at org.springframework.data.jpa.repository.query.SimpleJpaQuery.validateQuery(SimpleJpaQuery.java:92)
at org.springframework.data.jpa.repository.query.SimpleJpaQuery.<init>(SimpleJpaQuery.java:62)
at org.springframework.data.jpa.repository.query.JpaQueryFactory.fromMethodWithQueryString(JpaQueryFactory.java:72)
at org.springframework.data.jpa.repository.query.JpaQueryFactory.fromQueryAnnotation(JpaQueryFactory.java:53)
at org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy$DeclaredQueryLookupStrategy.resolveQuery(JpaQueryLookupStrategy.java:136)
Truncated. see log file for complete stacktrace
Caused By: java.lang.IllegalStateException: No data type for node: org.hibernate.hql.internal.ast.tree.AggregateNode
\-[AGGREGATE] AggregateNode: 'MAX'
\-[METHOD_CALL] MethodNode: '('
+-[METHOD_NAME] IdentNode: 'TO_NUMBER' {originalText=TO_NUMBER}
\-[EXPR_LIST] SqlNode: 'exprList'
\-[DOT] DotNode: 'dbanche0_.CODI_BANCA' {propertyName=codiBanca,dereferenceType=PRIMITIVE,getPropertyPath=codiBanca,path=ban.codiBanca,tableAlias=dbanche0_,className=it.gov.mef.efim.dao.entities.DBanche,classAlias=ban}
+-[ALIAS_REF] IdentNode: 'dbanche0_.SEQU_ID_BANCA' {alias=ban, className=it.gov.mef.efim.dao.entities.DBanche, tableAlias=dbanche0_}
\-[IDENT] IdentNode: 'codiBanca' {originalText=codiBanca}
原因:java.lang.IllegalArgumentException:方法公共抽象java.math.BigDecimal it.gov.mef.efim.dao.repository.base.BancaDao.getMaxCodiBanca()的查询验证失败!
位于org.springframework.data.jpa.repository.query.SimpleJpaQuery.validateQuery(SimpleJpaQuery.java:92)
位于org.springframework.data.jpa.repository.query.SimpleJpaQuery.(SimpleJpaQuery.java:62)
位于org.springframework.data.jpa.repository.query.JpaQueryFactory.fromMethodWithQueryString(JpaQueryFactory.java:72)
位于org.springframework.data.jpa.repository.query.JpaQueryFactory.fromQueryNotation(JpaQueryFactory.java:53)
位于org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy$DeclaredQueryLookupStrategy.resolveQuery(JpaQueryLookupStrategy.java:136)
截断的。有关完整的堆栈跟踪,请参阅日志文件
原因:java.lang.IllegalStateException:节点没有数据类型:org.hibernate.hql.internal.ast.tree.AggregateNode
\-[聚合]聚合节点:“最大”
\-[方法调用]方法节点:'('
+-[METHOD_NAME]IdentNode:'TO_NUMBER'{originalText=TO_NUMBER}
\-[EXPR_LIST]SqlNode:'exprList'
\-[DOT]DotNode:'dbanche0_u0.CODI_BANCA'{propertyName=codiBanca,dereferenceType=PRIMITIVE,getPropertyPath=codiBanca,path=ban.codiBanca,tableAlias=dbanche0_0,className=it.gov.mef.efim.dao.entities.DBanche,classAlias=ban}
+-[ALIAS_REF]IdentNode:'dbanche0_u0.SEQU_ID_BANCA'{ALIAS=ban,className=it.gov.mef.efim.dao.entities.DBanche,tableAlias=dbanche0_0}
\-[IDENT]IdentNode:'codiBanca'{originalText=codiBanca}
如何修复此错误?您似乎在使用本机查询,即SQL语法特定于数据库供应商 因此,将属性
nativeQuery=true
添加到@Query
中,如下所示
@Query(nativeQuery=true, value = "SELECT MAX(TO_NUMBER(ban.codiBanca)) FROM DBanche ban WHERE LENGTH(TRIM(TRANSLATE(ban.codiBanca, '0123456789', ' '))) IS NULL")
public BigDecimal getMaxCodiBanca();
希望这有帮助
如果您仍然面临任何问题,请在此处发布。您似乎在使用本机查询,即SQL语法特定于DB供应商 因此,将属性
nativeQuery=true
添加到@Query
中,如下所示
@Query(nativeQuery=true, value = "SELECT MAX(TO_NUMBER(ban.codiBanca)) FROM DBanche ban WHERE LENGTH(TRIM(TRANSLATE(ban.codiBanca, '0123456789', ' '))) IS NULL")
public BigDecimal getMaxCodiBanca();
希望这有帮助
如果您仍然面临任何问题,请在此处发布。解决方案:添加到字符到最大值(到字符号(ban.codiBanca))并返回字符串解决方案:添加到字符到最大值(到字符号(ban.codiBanca))并返回字符串您的解决方案是正确的!您的解决方案是正确的!