У меня проблема с управлением датами с миллисекундами. Я понимаю необходимость использования TIMESTAMP для хранения миллисекунд:
@Temporal(TIMESTAMP)
@Column(name="DATE_COLUMN", nullable = false)
@Override public java.util.Date getDate() { return this.date; }
Но если я не могу сравнить эту дату с другим экземпляром java.util.Date, если я не обращу внимание на порядок вызова equals(), потому что экземпляр this.date
- это java.sql.Timestamp. Как получить java.util.Date из JPA? Поскольку дата, которая исходит из JPA, даже если подпись метода является java.util.Date, фактически является экземпляром java.sql.Timestamp.
java.util.Date newDate = new Date(this.date.getTime());
this.date.equals(newDate) == false
newDate.equals(this.date) == true
Я пытаюсь изменить свой метод в классе persistence:
@Override
public Date getDate() {
return this.date == null ? null : new Date(this.date.getTime());
}
Он работает, но он не эффективен с большим количеством данных.
Существуют и другие варианты:
-
Я мог бы изменить дизайн моего класса persistence, используя
@PostLoad
, чтобы создать java.util.Date из оставшейся даты после его получения. -
Интересно, не могу ли я получить результат с помощью
ClassTransformer
?
Вы когда-нибудь сталкивались с этой проблемой? Что я не правильно? Каков наилучший способ справиться с этой проблемой?