Glassfish3.1.2およびeclipselink2.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は空ではありませんが、ConsumptionRoomAndPostに対しては機能しません。changeSetは空です。
もちろん、ConsumptionRoomAndPostに独自のリスナーConsumptionRoomAndPostAuditListenerを追加することもできますが、監査にはクライアント情報が必要であり、このクライアント情報をConsumptionRoomAndPostAuditListenerに提供するのに問題があります。