Если я запускаю этот запрос на моей БД, он работает нормально:
UPDATE Products SET in_Stock = (quantity_in_stock is not null and quantity_In_Stock > 0) WHERE id = 1 and deleted_At is NULL;
Но я использую Spring JPA и пытаюсь создать такой же запрос, как этот:
@Modifying
@Query("UPDATE Product p SET p.inStock = (p.quantityInStock is not null) WHERE p.id = :productId and p.deletedAt is NULL")
int updateInStock(@Param("productId") Long productId);
Проблема в том, что когда я пытаюсь запустить свое приложение, я получаю эту ошибку:
Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected AST node: is not null [UPDATE ca.edooby.edoobyapi.model.Product p SET p.inStock = (p.quantityInStock is not null) WHERE p.id = :productId and p.deletedAt is NULL]
at org.hibernate.hql.internal.ast.QuerySyntaxException.convert(QuerySyntaxException.java:74) ~[hibernate-core-5.2.17.Final.jar:5.2.17.Final]
at org.hibernate.hql.internal.ast.ErrorCounter.throwQueryException(ErrorCounter.java:91) ~[hibernate-core-5.2.17.Final.jar:5.2.17.Final]
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:272) ~[hibernate-core-5.2.17.Final.jar:5.2.17.Final]
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:189) ~[hibernate-core-5.2.17.Final.jar:5.2.17.Final]
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:141) ~[hibernate-core-5.2.17.Final.jar:5.2.17.Final]
at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:115) ~[hibernate-core-5.2.17.Final.jar:5.2.17.Final]
at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:77) ~[hibernate-core-5.2.17.Final.jar:5.2.17.Final]
at org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:153) ~[hibernate-core-5.2.17.Final.jar:5.2.17.Final]
at org.hibernate.internal.AbstractSharedSessionContract.getQueryPlan(AbstractSharedSessionContract.java:553) ~[hibernate-core-5.2.17.Final.jar:5.2.17.Final]
at org.hibernate.internal.AbstractSharedSessionContract.createQuery(AbstractSharedSessionContract.java:662) ~[hibernate-core-5.2.17.Final.jar:5.2.17.Final]
... 92 common frames omitted
Если я жестко закодирую значение, подобное этому, оно отлично работает:
@Modifying
@Query("UPDATE Product p SET p.inStock = false WHERE p.id = :productId and p.deletedAt is NULL")
int updateInStock(@Param("productId") Long productId);
Я пытался выяснить, что я сделал неправильно, но я не вижу этого. Я что-то упускаю?
Спасибо!