@GeoffreyDeSmet Я не знаю, можно ли преобразовать один атрибут в два столбца базы данных. В любом случае, мое предложение не меняет вашу модель, оно только расширяет вашу модель. Вы можете оставить существующие геттеры и сеттеры (принцип «открыто-закрыто»). Если вы не можете добавить другое поле, вы застряли, насколько я знаю. JPA не может преобразовать один атрибут в два столбца в соответствии со спецификацией, которую я знаю.

я есть следующий класс сущности:

@Entity
public class Event {
    private OffsetDateTime startDateTime;
    // ...
}

Тем не мение,сохранение и последующее чтение сущности в / из базы данных с помощью JPA 2.2 приводит к потере информации:ZoneOffset из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 это было сохранено

Ответы на вопрос(1)

Ваш ответ на вопрос