У меня есть объект приложения и некоторые объекты формы. Каждый раз, когда форма сохраняется, я хотел бы обновить Application.lastUpdated. Приложение имеет EntityListener, который я хочу использовать для установки Application.lastUpdated для меня.
Когда я сохраняю приложение, вызывается EntityListener, и он работает. Однако, когда я сохраняю форму, EntityListener не вызывается. Я вижу это по отладке и по тому факту, что поле lastUpdated не меняется. Форма имеет одностороннюю связь OneToOne с Приложением с CascadeType.ALL.
Могу ли я заставить эту установку работать? Если нет, есть ли лучший способ сделать это, чем вручную обновлять Application.lastUpdated каждый раз, когда я сохраняю форму?
Я использую JPA при поддержке Hibernate и HSQLDB. Все аннотации JPA.
Вот определение связи формы
@Entity
public class CourseForm implements Serializable {
private static final long serialVersionUID = -5670525023079034136L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
long id;
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "application_fk")
private Application application;
//more fields
//getters and setters
}
Приложение выглядит следующим образом:
@Entity
@EntityListeners({ LastUpdateListener.class })
public class Application implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
long id;
private LocalDateTime lastUpdate;
//more fields
Application() {
}
public LocalDateTime getLastUpdate() {
return lastUpdate;
}
public void setLastUpdate(LocalDateTime lastUpdate) {
this.lastUpdate = lastUpdate;
}
//getters and setters
}
Вот слушатель
public class LastUpdateListener {
@PreUpdate
@PrePersist
public void setLastUpdate(Application application) {
application.setLastUpdate(LocalDateTime.now());
}