Home > OS >  Caused by: org.postgresql.util.PSQLException: ERROR: syntax error at or near ":"
Caused by: org.postgresql.util.PSQLException: ERROR: syntax error at or near ":"

Time:10-11

I'm trying to execute SQL query from Spring repository:

@Repository
public interface OrderRepository extends CrudRepository<Orders, Long> {
    @Modifying
    @Transactional
    @Query(value = "DELETE FROM orders WHERE created_at < now()-'1 hour'::interval",
        nativeQuery = true)
    void executeDelete();
}

From PGAdmin I can successfully run the query:

test> DELETE FROM orders WHERE created_at < now()-'1 hour'::interval
2[2021-10-07 13:41:38] completed in 48 ms

But when I run the code I get:

Caused by: org.hibernate.exception.SQLGrammarException: could not execute statement
    at org.hibernate.exception.internal.SQLStateConversionDelegate.convert(SQLStateConversionDelegate.java:103)
    at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:42)
    at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:113)
    at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:99)
    at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:200)
    at org.hibernate.engine.query.spi.NativeSQLQueryPlan.performExecuteUpdate(NativeSQLQueryPlan.java:107)
    at org.hibernate.internal.SessionImpl.executeNativeUpdate(SessionImpl.java:1509)
    at org.hibernate.query.internal.NativeQueryImpl.doExecuteUpdate(NativeQueryImpl.java:298)
    at org.hibernate.query.internal.AbstractProducedQuery.executeUpdate(AbstractProducedQuery.java:1672)
    at org.springframework.data.jpa.repository.query.JpaQueryExecution$ModifyingExecution.doExecute(JpaQueryExecution.java:239)
    at org.springframework.data.jpa.repository.query.JpaQueryExecution.execute(JpaQueryExecution.java:88)
    at org.springframework.data.jpa.repository.query.AbstractJpaQuery.doExecute(AbstractJpaQuery.java:155)
    at org.springframework.data.jpa.repository.query.AbstractJpaQuery.execute(AbstractJpaQuery.java:143)
    at org.springframework.data.repository.core.support.RepositoryMethodInvoker.doInvoke(RepositoryMethodInvoker.java:137)
    at org.springframework.data.repository.core.support.RepositoryMethodInvoker.invoke(RepositoryMethodInvoker.java:121)
    at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.doInvoke(QueryExecutorMethodInterceptor.java:152)
    at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.invoke(QueryExecutorMethodInterceptor.java:131)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
    at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:123)
    at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:388)
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
    at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:137)
    ... 31 common frames omitted
Caused by: org.postgresql.util.PSQLException: ERROR: syntax error at or near ":"
  Position: 76

Do you know how I can properly implement this SQL query?

CodePudding user response:

Try so:

public interface OrderRepository extends CrudRepository<Orders, Long> {

    @Modifying
    @Transactional
    @Query(value = "DELETE FROM orders WHERE created_at < now() - interval '1 hour'",
        nativeQuery = true)
    void executeDelete();
}
  • Related