我有以下实体类:
@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