0

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

4

1 回答 1

0

解决了。

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

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

它的全部。

于 2012-12-11T11:10:53.017 回答