] Как использовать java.sql.Timestamp как настоящий java.util.Date с JPA

У меня проблема с управлением датами в миллисекундах. Я понимаю необходимость использования 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

Я попытался изменить свой метод в классе постоянства:

@Override
public Date getDate() {
  return this.date == null ? null : new Date(this.date.getTime());
}

Он работает, но неэффективен при большом количестве данных.

Есть и другие варианты:

  • Я мог бы изменить дизайн своего класса сохранения, используя @PostLoad , чтобы создать java.util . Дата от сохраненной даты после того, как я ее извлек.

  • Интересно, не могу ли я получить результат с помощью ClassTransformer ?

Вы когда-нибудь сталкивались с этой проблемой? Что делаю не правильно? Как лучше всего решить эту проблему?

14
задан Michael Eakins 25 October 2010 в 13:51
поделиться