Utilizamos un tipo de fecha Hibernate personalizado. Cada vez que establecemos un parámetro en una consulta usamos una clase base o un método de utilidad para que podamos pasar la zona horaria del usuario en el parámetro de tipo personalizado.
Puede obtenerlo simplemente ajustando manualmente la hora en el método de utilidad para consultas, pero de esta forma las fechas que se leen o escriben en la base de datos también se convierten correctamente. Este método también maneja la situación donde la base de datos almacena la fecha en su zona horaria local. Entonces, incluso si tiene un usuario en una zona horaria, un servidor de base de datos en otra y Java usando GMT, puede hacerlo todo correctamente. Se termina pareciéndose a:
Properties properties = new Properties();
properties.setProperty("timeZone", databaseTimeZone);
query.setParameter("from", dateEnteredByUser, Hibernate.custom(LocalizedDateType.class, properties));
Como un beneficio adicional, usamos esta para hacer frente al hecho de que SQL Server convierte 23: 59: 59.999 al día siguiente. En el tipo personalizado, verificamos eso y lo cancelamos.
Esto también me mordió a mí también. No ayuda que en Oracle 'DATE' sea una fecha y hora que coincida con' Date' de Java, mientras que 'TIMESTAMP' es una fecha y hora con microsegundos. –
Ahora el método setTimestamp (String, Date) del tipo Query está en desuso –
Maske
Has guardado mi día, gracias de antemano. – VAdaihiep