Я бы не использовал Date и Calendar в сущностях JPA, когда они хранятся в базе данных. Стандарт Временные значения JDBC не имеют понятия временных меток.
Вместо этого я использую следующий стиль
private Long effectiveDate;
public Date getEffectiveDate() {
if (effectiveDate == null) { return null; }
return new Date(effectiveDate);
}
public void setEffectiveDate(Date d) {
if (d == null) { effectiveDate = null; }
effectiveDate = d.getTime();
}
Фактически данные, которые хранятся в базе данных, представляют собой простое длинное значение. Однако на уровне приложения вы по-прежнему используете объекты Date, имеющие концепцию часовых поясов.
Теперь иногда вам все же захочется сохранить дату для целей запроса на уровне базы данных. В этом случае вы можете сделать следующее
private Long effectiveDate;
private Date effectiveDateDate;
public Date getEffectiveDate() {
if (effectiveDate == null) { return null; }
return new Date(effectiveDate);
}
public void setEffectiveDate(Date d) {
effectiveDateDate = d;
if (d == null) { effectiveDate = null; }
effectiveDate = d.getTime();
}