2015-09-11 3 views
1

Я использую пользовательские запросы в JPA, это не позволяет мне использовать ключевое слово interval. Он дает правильный результат, если я не использую - interval '7 days' в запросе.Пользовательские запросы в JPA в Spring MVC

Исключение говорит: Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: interval near line 1, column 214

 @Query("select d from DomainName d , DomainNameReminder dr, Reseller r"+ 
     " where d.reminder.id = dr.id "+ 
     " and dr.secondNotification=current_date - interval '7 days' "+ 
     " and r.checkParty=true "+ 
     " and r.id = d.invoicingParty.id ") 
     public List<Object> findDomainsBySecondNotificationDate(); 

Этот запрос в основном приносит все записи, которые имеющие второй срок уведомления за 7 дней до сегодняшнего дня.

Мой интерфейс объявлен как

public interface DomainNameRepository extends JpaRepository<DomainName, Long>, 
QueryDslPredicateExecutor<DomainName> { 

Мой запрос дает правильный вывод в pgadmin postgresql client, я очень удивлен, почему я не могу использовать ключевые слова здесь.

+0

Это решение может помочь вам в вопросе. http://stackoverflow.com/questions/1945615/how-to-map-the-type-interval-in-hibernate#answer-6139581 – javasenior

+1

JPQL и SQL - это два разных языка. Попытка использовать запрос JPQL в клиенте postgresql и наоборот не имеет большого смысла. –

+0

Вы пытались добавить 'nativeQuery = true' в аннотацию @Query? – reto

ответ

4

Это решило мою проблему.

Я использовал nativeQuery=true и использовал запрос, который я выполнил в postgresql. Мысль делиться и с другими.

@Query(nativeQuery = true, value = "select domain_name.* from domain_name, domain_name_reminder, reseller " + 
     "where domain_name.reminder_id = domain_name_reminder.id " + 
     "and domain_name_reminder.second_notification=current_date - interval ':totalDays days' " + 
     "and reseller.myCheck=true " + 
     "and reseller.id = domain_name.invoicing_party_id ") 
public List<DomainName> findDomainsBySecondNotificationDate(@Param("totalDays")Integer totalDays); 
Смежные вопросы