0

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に提供するのに問題があります。

4

1 に答える 1

0

解決しました。

リレーションシップを双方向に変更した後、Eclipse リンクはすべての属性の変更を追跡します。エンティティ ConsumptionRoomAndPost に追加しました:

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

そのすべて。

于 2012-12-11T11:10:53.017 に答える