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.
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