2016-06-18 5 views
0

J'ai marqué mon entité @Audited et je peux voir qu'il enregistre le numéro de révision et horodatage d'une nouvelle révision, mais comment puis-je ajouter des métadonnées personnalisées? Je crois qu'il doit être possible puisque org.springframework.data.RevisionMetadata a la méthode getDelegate() avec la Javadoc suivante:Printemps données Envers les métadonnées personnalisées

Renvoie les métadonnées de révision sous-jacente qui pourrait fournisseur une application plus détaillée des informations spécifiques.

Répondre

1

Du point de vue pur Hibernate Envers, si vous voulez que votre entité de révision pour stocker des informations de contexte supplémentaires sur une révision, comme qui a modifié les entités ou peut-être une raison pour le changement, alors vous voulez le faire à travers un RevisionListener rappel combiné avec une extension personnalisée à DefaultRevisionEntity.

Par exemple:

@Entity 
@RevisionEntity(CustomRevisionListener.class) 
public class CustomRevisionEntity extends DefaultRevisionEntity { 
    private String userName; 
    /* getter/setters */ 
} 

public class CustomRevisionListener implements RevisionListener { 
    @Override 
    public void newRevision(Object revisionEntity) { 
    CustomRevisionEntity cre = (CustomRevisionEntity)revisionEntity; 
    cre.setUserName(UserContextHolder.getUserContext().getUserName()); 
    } 
} 

Envers détectera la annotée spéciale @RevisionEntity-classe d'entité et de l'utiliser. Il détectera également l'implémentation RevisionListener spécifiée et instanciera et rappellera cette classe lorsqu'une nouvelle entité de révision sera construite.

Malheureusement, je ne peux pas parler de la façon dont cela se traduit par l'utilisation en ce qui concerne spring-data et spring-data-envers projets.

+0

Ils ne me laisseront pas éditer la réponse, alors voici comment vous pouvez obtenir les métadonnées avec Spring Data Envers (yay pour le formatage): 'Long entityId = 1L; Révision révision = enversRepository.findLastChangeRevision (entityId); CustomRevisionEntity metadata = revision.getMetadata(). GetDelegate(); ' – Aerus