Нет средств для автоматического обновления от имени JPA
или других технологий, кроме опроса и обновления.Тем не менее, ваш статус должен быть методом, который вычисляет статус (вместо поля), например:
public String getStatus() {
if(date.before(new Date())) return "expired";
return ""; // or what ever are statuses
}
Кроме того, вы должны собирать статусы как enum
значения.
С JPA
вы можетеконечно, используйте @PrePersist
& @PostLoad
при извлечении или сохранении в дБ, например:
@PrePersist // benefit of this would be marginal since usually you do not deal
// much with entity after persisting
@PostLoad
private void updateStatus() {
if(date.before(new Date())) status = "expired";
Проблема с вышеприведенным подходом заключается в том, что вышеуказанные обновления запускаются только при сохранении или загрузке сущности.Поэтому, если бы вы загрузили объект, срок действия которого не истек, и срок его действия истекает во время сеанса, вы не заметите, что срок его действия истек до первого раза после его истечения.