2008-09-19 8 views
5

J'ai une application qui utilise une combinaison hibernate (annotations)/mysql pour ORM. Dans cette application, j'ai obtenu une entité avec un champ Date. Je cherche un moyen de sélectionner cette date dans un intervalle de temps (donc hh: mm: ss sans la partie date).Comparer la partie temps du champ datetime dans Hibernate

En MySQL il y a une fonction TIME (expression) qui peut extraire la partie temps et l'utiliser dans la clause where, mais qui ne semble pas disponible dans Hibernate sans passer aux requêtes natives. Y at-il une option dans hibernate pour faire ceci, ou devrais-je passer en revue les résultats dans Java et faire la comparaison là? Serait-ce beaucoup plus lent que la solution MySQL, puisque cela n'utiliserait pas d'index?

Répondre

4

Les fonctions suivantes sont disponibles dans HQL, vous pourriez peut-être les utiliser:

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

1

Ajouter l'expression comme une restriction SQL plutôt que d'avoir une requête native complète. Je ne connais pas spécifiquement MySQL, mais imaginons quelque chose comme ceci:

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

La documentation indique l'expression est 'semi-dépréciée' et utilise Restrictions.sqlRestriction(). –

+0

Merci pour le heads-up! Nous passons toujours d'Hibernate 2 à Hibernate 3 dans notre organisation. Je vais être sûr de vérifier cela. –

Questions connexes