2008-09-19 14 views
5

Tengo una aplicación que utiliza una combinación hibernate (anotaciones)/mysql para ORM. En esa aplicación, obtuve una entidad con un campo de Fecha. Estoy buscando una manera de seleccionar en esa fecha dentro de un rango de tiempo (por lo hh: mm: ss sin la parte de fecha).Comparación de la parte del tiempo del campo datetime en Hibernate

En MySQL hay una función TIME (expresión) que puede extraer la parte de tiempo y usarla en la cláusula where, pero que no parece estar disponible en Hibernate sin cambiar a consultas nativas. ¿Hay alguna opción en Hibernar para hacer esto, o debería recorrer los resultados en Java y hacer la comparación allí? ¿Sería esto mucho más lento que la solución MySQL, ya que de todos modos no usaría índices?

Respuesta

4

Las siguientes funciones están disponibles en HQL, tal vez usted podría utilizar:

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

1

Añadir la expresión como una restricción de SQL en lugar de tener una consulta nativa completa. No sé MySQL específicamente, pero imagino algo como esto:

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

La documentación indica teh expresión es 'semi obsoleto' y para uso Restrictions.sqlRestriction(). –

+0

¡Gracias por el aviso! Todavía nos movemos de Hibernate 2 a Hibernate 3 en nuestra organización. Me aseguraré de verificarlo. –

Cuestiones relacionadas