2010-05-11 6 views
2

J'utilise déjà Hibernate Envers pour auditer les entités qui sont mises à jour par un utilisateur via l'interface utilisateur; Cependant, j'ai aussi des tâches asynchrones en arrière-plan et j'aimerais les auditer aussi en utilisant Envers. Maintenant, pour l'interface utilisateur, je repère quel HttpRequest a fait la modification qui me donne la date, l'utilisateur, la session, etc. Pour les travaux d'arrière-plan, je voudrais suivre la date à laquelle le travail a été exécuté ainsi que le travail exact qui l'a modifié (classe d'emplois).Hibernate - Envers - cibles d'audit multiples

Est-il possible de configurer 2 entités d'audit, 1 pour l'interface utilisateur et 1 pour les modifications du système?

Walter

Répondre

1

Je n'ai pas testé encore sorti, mais je fais simplement ce qui suit:

@RevisionListener(SystemRevisionListener.class) 
@Entity 
public class SystemRevision extends AbstractRevision 
{ 
    @Column(nullable = false, updatable = false) 
    protected QuartzTriggerHandle job; 

    @Column(nullable = false, updatable = false) 
    protected Class jobClass; 

    ... 
} 



@RevisionListener(WebRevisionListener.class) 
@Entity 
public class WebRevision extends AbstractRevision 
{ 
    @ManyToOne(optional = false) 
    @JoinColumn(nullable = false, updatable = false) 
    protected HttpRequest httpRequest; 

    ... 
} 

Ensuite, dans chaque auditeur, je fais tout ce que je dois faire pour définir ces propriétés . Je devrais maintenant être capable de suivre comment une entité a été modifiée, si un utilisateur a fait le changement (et à quelle demande il est lié), ou si le système a changé l'entité, quel travail est responsable du changement. Je stockerais plus de propriétés dans SystemRevision que cela, probablement les arguments et le nom de la méthode.

Questions connexes