Java Spring не пропускает SQL(MySQL) запрос

Есть приложение Spring на Java. В нём есть обращение к базе MySQL. Оно работает.

@Query("UPDATE Task t set t.status = :to WHERE t.status = :from")
void updateStatusFromTo(@Param("from") TaskStatus from, @Param("to") TaskStatus to);

Мне нужно в него добавить проверку по времени. Сделал так:

@Query("UPDATE Task t set t.status = :to WHERE t.status = :from AND DATE_ADD(t.date, INTERVAL 1 HOUR) < NOW()")
void updateStatusFromTo(@Param("from") TaskStatus from, @Param("to") TaskStatus to);

Так не работает. Выдаёт ошибку при запуске:

Caused by: java.lang.IllegalArgumentException: org.hibernate.query.SemanticException: A query exception occurred [UPDATE Task t set t.status = :to WHERE t.status = :from AND DATE_ADD(t.date, INTERVAL 1 HOUR) < NOW()]
at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:138) ~[hibernate-core-6.1.1.Final.jar:6.1.1.Final]
at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:175) ~[hibernate-core-6.1.1.Final.jar:6.1.1.Final]
at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:182) ~[hibernate-core-6.1.1.Final.jar:6.1.1.Final]
at org.hibernate.internal.AbstractSharedSessionContract.createQuery(AbstractSharedSessionContract.java:757) ~[hibernate-core-6.1.1.Final.jar:6.1.1.Final]
at org.hibernate.internal.AbstractSharedSessionContract.createQuery(AbstractSharedSessionContract.java:659) ~[hibernate-core-6.1.1.Final.jar:6.1.1.Final]
at org.hibernate.internal.AbstractSharedSessionContract.createQuery(AbstractSharedSessionContract.java:123) ~[hibernate-core-6.1.1.Final.jar:6.1.1.Final]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[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:568) ~[na:na]
at org.springframework.orm.jpa.ExtendedEntityManagerCreator$ExtendedEntityManagerInvocationHandler.invoke(ExtendedEntityManagerCreator.java:360) ~[spring-orm-6.0.0-SNAPSHOT.jar:6.0.0-SNAPSHOT]
at jdk.proxy2/jdk.proxy2.$Proxy109.createQuery(Unknown Source) ~[na:na]
at org.springframework.data.jpa.repository.query.SimpleJpaQuery.validateQuery(SimpleJpaQuery.java:94) ~[spring-data-jpa-3.0.0-M5.jar:3.0.0-M5]
... 72 common frames omitted
Caused by: org.hibernate.query.SemanticException: A query exception occurred [UPDATE Task t set t.status = :to WHERE t.status = :from AND DATE_ADD(t.date, INTERVAL 1 HOUR) < NOW()]
at org.hibernate.query.hql.internal.StandardHqlTranslator.parseHql(StandardHqlTranslator.java:130) ~[hibernate-core-6.1.1.Final.jar:6.1.1.Final]
at org.hibernate.query.hql.internal.StandardHqlTranslator.translate(StandardHqlTranslator.java:77) ~[hibernate-core-6.1.1.Final.jar:6.1.1.Final]
at org.hibernate.internal.AbstractSharedSessionContract.lambda$createQuery$2(AbstractSharedSessionContract.java:744) ~[hibernate-core-6.1.1.Final.jar:6.1.1.Final]
at org.hibernate.query.internal.QueryInterpretationCacheStandardImpl.createHqlInterpretation(QueryInterpretationCacheStandardImpl.java:141) ~[hibernate-core-6.1.1.Final.jar:6.1.1.Final]
at org.hibernate.query.internal.QueryInterpretationCacheStandardImpl.resolveHqlInterpretation(QueryInterpretationCacheStandardImpl.java:128) ~[hibernate-core-6.1.1.Final.jar:6.1.1.Final]
at org.hibernate.internal.AbstractSharedSessionContract.createQuery(AbstractSharedSessionContract.java:741) ~[hibernate-core-6.1.1.Final.jar:6.1.1.Final]
... 81 common frames omitted
Caused by: org.hibernate.query.sqm.ParsingException: line 1:86 no viable alternative at input 'DATE_ADD(t.date,INTERVAL1'
at org.hibernate.query.hql.internal.StandardHqlTranslator$1.syntaxError(StandardHqlTranslator.java:46) ~[hibernate-core-6.1.1.Final.jar:6.1.1.Final]
at org.antlr.v4.runtime.ProxyErrorListener.syntaxError(ProxyErrorListener.java:41) ~[antlr4-runtime-4.10.jar:4.10]
at org.antlr.v4.runtime.Parser.notifyErrorListeners(Parser.java:543) ~[antlr4-runtime-4.10.jar:4.10]
at org.antlr.v4.runtime.DefaultErrorStrategy.reportNoViableAlternative(DefaultErrorStrategy.java:310) ~[antlr4-runtime-4.10.jar:4.10]
at org.antlr.v4.runtime.DefaultErrorStrategy.reportError(DefaultErrorStrategy.java:136) ~[antlr4-runtime-4.10.jar:4.10]
at org.hibernate.grammars.hql.HqlParser.predicate(HqlParser.java:5984) ~[hibernate-core-6.1.1.Final.jar:6.1.1.Final]
at org.hibernate.grammars.hql.HqlParser.predicate(HqlParser.java:5958) ~[hibernate-core-6.1.1.Final.jar:6.1.1.Final]
at org.hibernate.grammars.hql.HqlParser.whereClause(HqlParser.java:5317) ~[hibernate-core-6.1.1.Final.jar:6.1.1.Final]
at org.hibernate.grammars.hql.HqlParser.updateStatement(HqlParser.java:629) ~[hibernate-core-6.1.1.Final.jar:6.1.1.Final]
at org.hibernate.grammars.hql.HqlParser.statement(HqlParser.java:319) ~[hibernate-core-6.1.1.Final.jar:6.1.1.Final]
at org.hibernate.query.hql.internal.StandardHqlTranslator.parseHql(StandardHqlTranslator.java:116) ~[hibernate-core-6.1.1.Final.jar:6.1.1.Final]
... 86 common frames omitted

Делаю то же самое в MySQLClient. Всё работает:

mysql> UPDATE Task t set t.status = 0 WHERE t.status = 1 AND DATE_ADD(t.date, INTERVAL 1 HOUR) < NOW();
Query OK, 1 row affected (0.41 sec)
Rows matched: 1  Changed: 1  Warnings: 0

В чём может быть проблема? Какое есть решение?


Ответы (0 шт):