Pregunta

Una tabla tiene la columna de marca de tiempo. Un valor de ejemplo en el que podría ser 2010-03-30 13:42:42. Con Hibernate, estoy haciendo una consulta gama Restrictions.between ( "nombre-columna", fromDate, TODATE).

El mapeo Hibernate para esta columna es como sigue.

<property name="orderTimestamp"  column="order_timestamp" type="java.util.Date" />

Vamos a decir, quiero averiguar todos los registros que tienen el 30 de marzo de 2010 y la fecha 31ra marzo de 2010. Una consulta rango en este campo se realiza de la siguiente manera.

Date fromDate = new SimpleDateFormat("yyyy-MM-dd").parse("2010-03-30");
Date toDate = new SimpleDateFormat("yyyy-MM-dd").parse("2008-03-31");
Expression.between("orderTimestamp", fromDate, toDate);

Esto no funciona.

La consulta se convierte a respectivas marcas de tiempo como "2010-03-30 00:00:00" y "2010-03-31 00:00:00". Por lo tanto, todos los registros para el día 31 de marzo de 2010 son ignorados.

Una solución simple a este problema podría ser que la fecha de finalización como "2010-03-31 23:59:59". Sin embargo, me gustaría saber si hay manera de coincidir sólo la parte de fecha de la columna de marca de tiempo.

Además, es Expression.between() inclusiva de ambos límites? Documentación no arroja ninguna luz sobre esto.

No hay solución correcta

Otros consejos

  

, me gustaría saber si hay manera de coincidir sólo la parte de fecha de la columna de marca de tiempo.

Si no desea un TIMESTAMP, utilizar una fecha (y no debería usar type="date"?).

  

Además, es Expression.between () incluyen todos los límites de ambos?

Parece que el comportamiento del operador de SQL ENTRE es base de datos dependiente. Con PosgreSQL, la expresión ENTRE:

x BETWEEN y AND z

es semánticamente equivalente a:

y <= x AND x <= z

es decir. inclusive.

El "2010-03-31 23:59:59". condición de frontera es potencialmente peligrosa: si había una transacción en el sistema entre 23:59:59 y 00:00:00, te lo pierdas. Si usted tiene suficientes transacciones diarias y un período de tiempo suficiente, un informe se va a romper y podrá pasar horas para averiguar por qué.

between href="http://www.java2s.com/Code/PostgreSQL/Select-Query/UsingBETWEEN.htm" rel="nofollow noreferrer"> incluye los límites para que no se incluso ser seguro para establecer la fecha de finalización para 2010-04-01 00:00:00. Uso lt () y GT () para estar seguro.

Tal vez usted puede echar orderTimestamp a una fecha. HQL tiene el apoyo para esto.

Uso fundido (your_data, fecha), recuerda la segunda arg de la función de conversión debe ser menor o que no funcionará.

Att .: Samuel \ Maycon

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top