#java #hibernate
#java #переход в спящий режим
Вопрос:
У меня есть запрос в одном из моих проектов, как показано ниже, который использует специфичный для Oracle материал. Как переписать это в HQL?
from HotAddressHibId a where a.expirationTsp >= trunc(SYSDATE)
Комментарии:
1.
TRUNC(SYSTDATE)
фактически сейчас полночь текущего дня.2. @trashgod это правильно, но мне интересно, является ли это специфичным для orcale или правильным HQL
3. Он специфичен для Oracle, но Hib передает все, что он не понимает, в RDBMS, и поэтому он работает. Однако переносимость нарушена.
4. Просто информация для прохожих. Теперь я вижу, что вы переходите на HQL, а не меняете базы данных.
Ответ №1:
Оба trunc()
и sysdate()
зарегистрированы как функции на диалекте Hibernate для Oracle, поэтому вы можете просто сделать это:
from HotAddressHibId a where a.expirationTsp >= trunc(sysdate())
Ответ №2:
"from HotAddressHibId a where a.expirationTsp >= ?"
Затем подготовьте объект Date, удалив часы, минуты, секунды и миллисекунды, и привяжите к параметру запроса.
Обратите внимание, что поведение может измениться, если Oracle находится в другом часовом поясе.
Ответ №3:
Вы могли бы использовать запрос критериев гибернации с sqlRestriction:
List elements = session.createCriteria(HotAddressHibId.class)
.add( Restrictions.sqlRestriction("expiration_tsp >= trunc(SYSDATE)" )
.list();