JPA Almacenamiento de OffsetDateTime con ZoneOffset
Tengo la siguiente clase de entidad:
@Entity
public class Event {
private OffsetDateTime startDateTime;
// ...
}
Sin embargo,persistir y luego leer la entidad hacia / desde la base de datos con JPA 2.2 resulta en una pérdida de información: elZoneOffset
destartDateTime
cambios aUTC
(elZoneOffset
utilizado por la marca de tiempo de la base de datos). Por ejemplo
Event e = new Event();
e.setStartDateTime(OffsetDateTime.parse("2018-01-02T09:00-05:00"));
e.getStartDateTime().getHour(); // 9
e.getStartDateTime().getOffset(); // ZoneOffset.of("-05:00")
// ...
entityManager.persist(e); // Stored startDateTime as timestamp 2018-01-02T14:00Z
Event other = entityManager.find(Event.class, e.getId());
other.getStartDateTime().getHour(); // 14 - DIFFERENT
other.getStartDateTime().getOffset(); // ZoneOffset.of("+00:00") - DIFFERENT
Necesito usarOffsetDateTime
: No puedo usarZonedDateTime
, porque las reglas de zona cambian (y eso también sufre esta pérdida de información de todos modos). No puedo usarLocalDateTime
, ya que unaEvent
sucede en cualquier parte del mundo y necesito la @ originZoneOffset
desde que sucedió por razones de precisión. No puedo usarInstant
porque un usuario completa la hora de inicio de un evento (el evento es como una cita).
Requisitos:
Necesita poder realizar>, <, >=, <=, ==, !=
comparaciones en marcas de tiempo en JPA-QL
Necesita poder recuperar la mismaZoneOffset
a partir de laOffsetDateTime
que persistió