Hibernate предоставляет два альтернативных пути для обнаружения измененных / грязных полей объекта, либо до, либо после его обновления, через перехватчик или прослушиватель.
Мы следовали второму подходу, реализовав PostUpdateEventListener и получив грязные свойства объекта (в виде индексов), переопределив void onPostUpdate (заключительное событие PostUpdateEvent). После объединения их с именами свойств объекта мы получили грязные имена свойств объекта.
Проблема возникает, когда у сущности есть грязные свойства @Embedded, то есть встраиваемые объекты. Вызов event.getDirtyProperties () возвращает только индекс, обозначающий встраиваемый объект сущности (т.е. ProjectInformation projectInformation).
Кажется, что нет способа получить точное свойство (грязное) встраиваемого объекта (то есть String projectName).
@Entity
public class Project {
@Embedded
private ProjectInformation projectInformation;
...
}
@Embeddable
public class ProjectInformation {
@Column
private String projectName;
...
}