2008-09-19 8 views
5

Ich habe eine Anwendung, die eine Hibernate (Annotationen)/Mysql-Kombination für ORM verwendet. In dieser Anwendung habe ich eine Entität mit einem Datumsfeld erhalten. Ich suche nach einer Möglichkeit, an diesem Datum innerhalb eines Zeitbereichs (also hh: mm: ss ohne Datumsteil) auszuwählen.Vergleichen Zeit Teil des Datetime-Felds in Hibernate

In MySQL gibt es eine Funktion TIME (Ausdruck), die den Zeitteil extrahieren und in der where-Klausel verwenden kann, aber das scheint in Hibernate nicht verfügbar zu sein, ohne auf native Abfragen umzuschalten. Gibt es eine Option im Hibernate, oder sollte ich die Ergebnisse in Java durchlaufen und den Vergleich dort durchführen? Wäre das viel langsamer als die MySQL-Lösung, da das sowieso keine Indizes verwenden würde?

Antwort

4

Folgende Funktionen sind in HQL zur Verfügung, vielleicht könnten Sie sie verwenden:

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

1

den Ausdruck als SQL Einschränkung hinzufügen, anstatt eine vollständige nativen Abfrage mit. Ich kenne MySQL nicht speziell, aber stell dir so etwas vor:

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

Die Dokumentation besagt, dass der Ausdruck 'semi deprecated' ist und Restrictions.sqlRestriction() verwendet wird. –

+0

Danke für das Heads-up! Wir bewegen uns immer noch von Hibernate 2 zu Hibernate 3 in unserer Organisation. Ich werde das überprüfen. –