审核OneToOne属性

时间:2012-12-10 16:05:47

标签: eclipselink

使用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。

1 个答案:

答案 0 :(得分:0)

解决。

将关系更改为双向后,eclipse链接会跟踪所有属性的更改。 我已添加到实体ConsumptionRoomAndPost:

public class ConsumptionRoomAndPost {
...
@OneToOne(mappedBy = "consumptionRoomAndPost", cascade = CascadeType.ALL)
private Client client;
...
}

全部。