@存储库计数查询-方法executeUpdate不能用于查询

时间:2020-01-01 13:43:13

标签: java spring-boot jpa spring-repositories

我需要获取今天插入的总行数。 我正在将IBM DB2与springboot 2一起用于数据库,并使用@Repository执行CRUD操作。

但是,我被牢记在心了。

@Transactional
@Modifying
@Query(value = "SELECT COUNT(1) FROM temp.MY_CALL WHERE DATE(INSERT_TS) = CURRENT_DATE ", nativeQuery = true)
int countByCurrentDa();

并获得以下异常

org.hibernate.engine.jdbc.spi.SqlExceptionHelper[0;39m: [jcc][10104][10942][4.9.78] Method executeUpdate cannot be used for query. ERRORCODE=-4476, SQLSTATE=null
org.springframework.orm.jpa.JpaSystemException: could not execute statement; nested exception is org.hibernate.exception.GenericJDBCException: could not execute statement
    at org.springframework.orm.jpa.vendor.HibernateJpaDialect.convertHibernateAccessException(HibernateJpaDialect.java:353)
    at org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:255)
    at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.translateExceptionIfPossible(AbstractEntityManagerFactoryBean.java:528)
    at org.springframework.dao.support.ChainedPersistenceExceptionTranslator.translateExceptionIfPossible(ChainedPersistenceExceptionTranslator.java:61)
    at org.springframework.dao.support.DataAccessUtils.translateIfNecessary(DataAccessUtils.java:242)
    at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:153)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
    at org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor$CrudMethodMetadataPopulatingMethodInterceptor.invoke(CrudMethodMetadataPostProcessor.java:149)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
    at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:93)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:212)

1 个答案:

答案 0 :(得分:2)

删除@Modifying批注-您无需对此查询进行任何修改。

根据文档:

表明查询方法应被视为修改查询,因为它改变了执行方法。

需要@Modifying批注的查询包括INSERT,UPDATE,DELETE和DDL语句。