使用 Glassfish 3.1.2 和 eclipselink 2.2.0。我必须跟踪以下实体的更改:
@Entity
@EntityListeners({AuditListener.class})
@Customizer(AuditListener.class)
public class Client extends Person {
...
@OneToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE})
private ConsumptionRoomAndPost consumptionRoomAndPost;
...
@OneToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE})
private List<Document> documentList;
...
审计监听器:
public class AuditListener extends DescriptorEventAdapter implements DescriptorCustomizer {
...
@Override
public void postMerge(DescriptorEvent event) {
if (event.getChangeSet() != null) {
...
}
}
}
这适用于文档列表,changeSet 不为空,但不适用于 ConsumptionRoomAndPost。变更集为空。
当然,我可以为 ConsumptionRoomAndPost 添加自己的侦听器 ConsumptionRoomAndPostAuditListener,但对于审计,我需要一个客户信息,而且我无法将此客户信息提供给 ConsumptionRoomAndPostAuditListener。