2017-01-17 2 views
1

J'ai configuré Mise en veille prolongée dans mon Envers projet Springboot et maintenant il est de sauver chaque changement dans les entités que j'annotés avec @Audited mais, je doute.Obtenir les valeurs d'origine de l'entité avec Hibernate Envers

Envers stocke la révision de l'entité après la première modification est effectuée, après une modification j'ai les nouvelles valeurs stockées dans la table d'entités et dans la table _AUD. Les changements suivants sont stockés dans la table _AUD donc je sais ce qui a changé après la première mise à jour mais les valeurs d'origine (celles avant la première modification) sont perdues. Est-ce que je manque quelque chose? Y at-il un moyen d'enregistrer les valeurs avant la modification est effectuée (comme j'ai déjà les dernières valeurs dans la table des entités) ?.

+1

Avez-vous une ligne dans votre table _AUD avec un 'REVTYPE = 0' ou sont-ils tous' REVTYPE = 1' ou 'REVTYPE = 2'? – Naros

+0

@Naros Il n'y a que 1s et 2s, donc ... il semble que Envers n'audite pas la création, n'est-ce pas? –

+0

Oui. Comment l'enregistrement est-il inséré dans la table pour commencer? L'enregistrement est-il une entité maintenue dans une collection par hasard? – Naros

Répondre

2

Il y a trois différents types de révision suivis par Envers:

  • ADD (RevType = 0) - Insertion
  • MOD (RevType = 1) - MISE À JOUR
  • DEL (RevType = 2) - Supprimer

Cela implique que si les entrées sont insérées, mises à jour et supprimé par Hibernate via une session stateful, ces pick-up sera Envers les changements et ajouter l'entrée REVTYPE appropriée au table d'audit.

Si une entrée est en cours de manipulation en dehors de la portée de la session avec état d'Hibernate, Envers ne sera pas informé de cette modification et l'entrée correspondante ne sera pas ajoutée à la table d'audit. Basé sur les commentaires, c'est pourquoi vous ne voyez pas une opération REVTYPE=0 (aka INSERT). Pour les situations de ce type, vous devez vous assurer que vous incrémentez la séquence du numéro de révision et ajoutez les entrées appropriées manuellement via votre script ou votre traitement par lots qui insère la ligne afin de garantir que le schéma Envers Compléter la visibilité de l'histoire de l'entité.