2008-09-19 15 views
5

Mam aplikację, która używa kombinacji hibernacji (adnotacji)/mysql dla ORM. W tej aplikacji otrzymałem obiekt z polem Data. Szukam sposobu, aby wybrać na tej daty w zakresie czasu (tak hh: mm: ss bez części daty).Porównaj część czasu pola datetime w Hibernate

W MySQL jest funkcja TIME (wyrażenie), która może wyodrębnić część czasu i użyć jej w klauzuli where, ale nie wydaje się być dostępna w Hibernate bez przełączania na natywne zapytania. Czy istnieje opcja hibernacji, aby to zrobić, czy powinienem pętli wyniki w java i zrobić tam porównanie? Czy byłoby to wolniejsze niż rozwiązanie MySQL, skoro i tak nie użyłoby to indeksów?

Odpowiedz

4

Następujące funkcje są dostępne w HQL, może można ich użyć:

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

1

Dodaj wyrażenie jako ograniczenie SQL zamiast pełnej natywnej zapytania. Nie wiem MySQL konkretnie, ale wyobrazić sobie coś takiego:

Criteria criteria = session.createCriteria(MyTable.class); 
criteria.add( 
    Expression.sql(
    "TIME({alias}.my_date, 'hh:mm:ss') >= :1", 
    dateRangeMin, 
    new StringType() 
) 
); 
+0

Dokumentacja stany teh wyrażenie jest „częściowo przestarzałe” i używać Restrictions.sqlRestriction(). –

+0

Dzięki za heads-up! W dalszym ciągu przechodzimy z Hibernate 2 do Hibernate 3 w naszej organizacji. Na pewno to sprawdzę. –

Powiązane problemy