Date Compare в HQL без временной отметки

Мне нужно сравнить две даты в запросе hibernate hql. Я использую java.util.Date в java bean и использую timestamp как тип данных в базе данных mysql.

select t from Task t where t.modifiedDate > t.endDate;

Вышеуказанный запрос сравнивает время с датой. Что мне делать, чтобы сравнивать дату в предыдущем запросе без времени.

Ответ 1

См. документацию Hibernate для доступных функций даты

http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/queryhql.html

В разделе 14.10 обратите внимание на эту строку

second(...), minute(...), hour(...), day(...), month(...), and year(...)

Итак, это должно работать

... where year(t.endDate) > year(t.startDate) 
    and month(t.endDate) > month(t.startDate)
    and day(t.endDate) > day(t.startDate)

Решение, отвечающее на вопрос,

 ... where DATE(t.endDate) > (t.startDate)

Ответ 2

Предлагаемое решение с функцией date(), по-видимому, не является чистым SQL и не работает для меня (с использованием SQL Server). Первоначальное решение (сравнение дня, месяца и года в отдельности) является шагом в правильном направлении, но не может быть сделано таким образом, как, например, для даты, которая должна быть в будущем, день не должен быть больше, если месяц больше и т.д. Однако следующий SQL должен работать:

( year(t.endDate) > year(t.startDate) )
or 
( year(t.endDate) = year(t.startDate) 
  and 
  month(t.endDate) > month(t.startDate) )
or 
( year(t.endDate) = year(t.startDate) 
  and
  month(t.endDate) = month(t.startDate) 
  and
  day(t.endDate) > day(t.startDate) )