Сравнить временную часть поля datetime в Hibernate - PullRequest
5 голосов
/ 19 сентября 2008

У меня есть приложение, которое использует комбинацию hibernate (аннотации) / mysql для ORM. В этом приложении я получил объект с полем Date. Я ищу способ выбрать эту дату в пределах временного диапазона (поэтому чч: мм: сс без части даты).

В MySQL есть функция TIME (выражение), которая может извлечь часть времени и использовать ее в предложении where, но, по-видимому, она не доступна в Hibernate без переключения на собственные запросы. Есть ли в hibernate вариант, чтобы сделать это, или я должен просмотреть результаты в java и сделать сравнение там? Будет ли это намного медленнее, чем решение MySQL, поскольку в любом случае оно не будет использовать индексы?

Ответы [ 2 ]

4 голосов
/ 19 сентября 2008

В HQL доступны следующие функции, возможно, вы могли бы их использовать:

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

1 голос
/ 19 сентября 2008

Добавьте выражение как ограничение SQL вместо полного собственного запроса. Я не знаю MySQL, но представляю что-то вроде этого:

Criteria criteria = session.createCriteria(MyTable.class);
criteria.add( 
  Expression.sql(
    "TIME( {alias}.my_date, 'hh:mm:ss') >= :1", 
    dateRangeMin, 
    new StringType()
  )
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...