使用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;
...
AuditListener:
public class AuditListener extends DescriptorEventAdapter implements DescriptorCustomizer {
...
@Override
public void postMerge(DescriptorEvent event) {
if (event.getChangeSet() != null) {
...
}
}
}
这适用于文档列表,changeSet不为空, 但不适用于ConsuRoomAndPost。 changeSet为空。
当然我可以为ConsuRoomAndPost添加自己的侦听器ConsuRoomAndPostAuditListener但是对于审计我需要客户端信息,而且我有一个问题是将此客户端信息提供给ConsuRoomAndPostAuditListener。
答案 0 :(得分:0)
解决。
将关系更改为双向后,eclipse链接会跟踪所有属性的更改。 我已添加到实体ConsumptionRoomAndPost:
public class ConsumptionRoomAndPost {
...
@OneToOne(mappedBy = "consumptionRoomAndPost", cascade = CascadeType.ALL)
private Client client;
...
}
全部。