Hibernate提供了两个替代路径,可通过拦截器或侦听器在更新实体之前或之后检测实体的已更改/脏字段。
我们遵循第二种方法,实现了PostUpdateEventListener并通过覆盖void onPostUpdate(最终PostUpdateEvent事件)来获取实体的脏属性(作为索引)。将它们与实体的属性名称组合后,我们得到了实体的肮脏属性名称。
当实体具有脏的@Embedded属性(也称为可嵌入对象)时,就会出现问题。 event.getDirtyProperties()的调用仅返回表示实体可嵌入对象的索引(即ProjectInformation projectInformation)。
似乎没有办法获得可嵌入对象(即字符串projectName)的确切属性(脏对象)。
@Entity
public class Project {
@Embedded
private ProjectInformation projectInformation;
...
}
@Embeddable
public class ProjectInformation {
@Column
private String projectName;
...
}