#java #hibernate #hql
#java #переход в режим гибернации #hql
Вопрос:
Как мне следует настроить условие HQL, которое выбирало бы все объекты, свойство date которых старше 3 часов с настоящего момента?
Ответ №1:
Это должно сработать.
Calendar cal = Calendar.getInstance();
cal.add(Calendar.HOUR_OF_DAY, -3);
Query q = session.createQuery("from table where date < :date");
q.setCalendarDate("date", cal);
q.list();
Комментарии:
1. Не следует ли вам вычесть 3 часа с этого момента и поискать
date < :date
?2. Я столкнулся с аналогичной проблемой, и в моем случае время сервера БД и время сервера приложений разные, поэтому это решение недействительно, пока я не установлю в поле timestamp время сервера приложений.
3. Использование времени из узла приложения для получения разницы во времени на узле базы данных. Это не очень хорошее решение. Более подходящим было бы использовать метод now() db (основанный на движке db engine) и date_sbu с интервалом, если это необходимо. w3schools.com/sql/func_mysql_date_sub.asp
4.
q.setCalendarDate("date", cal);
теперь не рекомендуется. Вы можете использоватьq.setParameter("date", cal.getTime());