Сравните две даты с JPA - PullRequest
       12

Сравните две даты с JPA

3 голосов
/ 28 августа 2009

Мне нужно сравнить две даты в запросе JPQL, но это не работает.

Вот мой запрос:

Query query = em.createQuery(
    "SELECT h 
     FROM PositionHistoric h, 
          SeoDate d 
     WHERE h.primaryKey.siteDb = :site 
     AND h.primaryKey.engineDb = :engine 
     AND h.primaryKey.keywordDb = :keyword 
     AND h.date = d 
     AND d.date <= :date 
     ORDER BY h.date DESC");`

Дата моего параметра - java.util.Date

Мой запрос возвращает список объектов, но даты выше и ниже моего параметра.

Кто-то знает, как это сделать?

Спасибо.

Ответы [ 2 ]

2 голосов
/ 03 сентября 2009

Запрос, который вы должны использовать:

 FROM PositionHistoric h
   INNER JOIN FETCH h.date
WHERE h.primaryKey.siteDb = :site
  AND h.primaryKey.engineDb = :engine
  AND h.primaryKey.keywordDb = :keyword
  AND h.date.date <= :date

Обратите внимание, что упорядочение по h.date довольно бессмысленно (так как оно указывает на сущность SeoDate и, следовательно, фактически вы упорядочиваете по PK), и вы не можете упорядочить по h.date.date, поскольку SeoDate отображается как many-to-one.

Также обратите внимание, что строка INNER JOIN FETCH h.date сама по себе не обязательна, но она сэкономит вам некоторые дополнительные ленивые запросы, если вам действительно потребуется использовать атрибуты SeoDate в возвращенном списке.

0 голосов
/ 28 августа 2009

Я предлагаю использовать java.sql.Date вместо java.util.Date

Потому что вы передаете его в JPQL (вид SQL).

Я обычно использую TIMESTAMP вместо даты, но если у вас не было выбора ..

И это: h.date = d.date вместо h.date = d?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...