У меня есть следующий класс сущностей:
@Entity
public class Event {
private OffsetDateTime startDateTime;
// ...
}
Однако сохранение и последующее чтение объекта в/из базы данных с помощью JPA 2.2 приводит к потере информации: ZoneOffset
of startDateTime
изменяется на UTC
(ZoneOffset
используемый временной меткой базы данных). Например:
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
Мне нужно использовать OffsetDateTime
: я не могу использовать ZonedDateTime
, потому что изменяются правила зоны (и это также страдает от этой потери информации). Я не могу использовать LocalDateTime
, так как Event
происходит в любой точке мира, и мне нужно, чтобы исходный ZoneOffset
когда это произошло по причинам точности. Я не могу использовать Instant
потому что пользователь заполняет время начала события (событие похоже на встречу).
Требования:
-
Нужно иметь возможность выполнять
>, <, >=, <=, ==, !=
Сравнения по меткам времени в JPA-QL -
Необходимо иметь возможность извлекать тот же
ZoneOffset
что и вOffsetDateTime
который был сохранен