2017-02-16 4 views
0

Я пытаюсь добавить метод @Modifying в весенне-JPA интерфейс со следующимиCURRENT_TIMESTAMP арифметика - QuerySyntaxException

@Modifying 
@Transactional 
@Query("update Contact cc set cc.bar=?2 where cc.foo = ?1 AND cc.createdTime>CURRENT_TIMESTAMP - interval '60' minute") 
public Contact setFixedBarFor(String foo, boolean bar); 

Но я получаю следующее исключение, ..

Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: interval near line 1, column 136 [update Contact cc set cc.foo=?2 where cc.bar = ?1 AND cc.createdTime>CURRENT_TIMESTAMP - interval '20' minute] 
    at org.hibernate.hql.internal.ast.QuerySyntaxException.convert(QuerySyntaxException.java:74) 
    at org.hibernate.hql.internal.ast.ErrorCounter.throwQueryException(ErrorCounter.java:91) 
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:288) 

Примечание : Следующие работы:

update Contact cc set cc.bar=?2 where cc.foo = ?1 AND cc.createdTime>CURRENT_TIMESTAMP 

update Contact cc set cc.bar=?2 where cc.foo = ?1 AND cc.createdTime>CURRENT_TIMESTAMP-1 

Я хочу, чтобы арифметика была встроена в него, и не уверен, что это, я делаю неправильно.

+1

Вы уверены, что это не такая же проблема, как описано [здесь] (http://stackoverflow.com/questions/17720674/oracle-jpa-querying-with-interval)? –

ответ

0

Законченное делает следующий

update Contact cc set cc.bar=?2 where cc.foo = ?1 AND cast((CURRENT_TIMESTAMP - (1/24)) as timestamp) between cc.createdTime and CURRENT_TIMESTAMP") 

Спасибо @Burhan для the указателя и это SO answer.