Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring 具有聚合函数的查询方法验证失败_Spring_Hibernate - Fatal编程技术网

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

我在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: 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))并返回字符串您的解决方案是正确的!您的解决方案是正确的!