Méthode recommandée pour réaliser un mode historique à long terme pour un système O / RM (Hibernate)?

StackOverflow https://stackoverflow.com/questions/204349

  •  03-07-2019
  •  | 
  •  

Question

J'ai mappé plusieurs classes Java telles que Customer, Assessment, Rating, ... vers une base de données avec Hibernate. Maintenant, je pense à un mode historique pour toutes les modifications apportées aux données persistantes. L'application est une application Web. En cas de suppression (ou de modification) des données, un autre utilisateur devrait avoir la possibilité de voir les modifications et de les annuler. Étant donné que les modifications sortent du cadre de la session en cours, je ne sais pas comment résoudre ce problème dans le modèle de commande, qui est recommandé pour la fonctionnalité d'annulation.

Pour éditer une valeur unique, une approche comme dans cette question est correcte. Mais qu'en est-il de la suppression de toute une entité persistante? Le moyen le plus simple consiste à créer un indicateur dans la table si ce client est supprimé ou non. La méthode la plus complexe consiste à créer une table pour chaque classe dans laquelle les entités supprimées sont stockées. Y a-t-il quelque chose entre les deux? Et comment puis-je intégrer ces deux choses dans un système O / RM (dans mon cas, Hibernate) confortablement, sans trop déranger avec SQL (que je veux éviter en raison de la portabilité) tout en ayant suffisamment de flexibilité?

Existe-t-il une meilleure pratique?

Était-ce utile?

La solution

Une solution consiste à créer un "historique des modifications". entité avec propriétés pour l'identificateur d'entité de l'entité modifiée, action (modifier / supprimer), nom de la propriété, valeur d'origine, nouvelle valeur. Peut-être aussi référence à l'utilisateur effectuant l'édition. Une suppression créerait des entités pour toutes les propriétés de l'entité supprimée avec l'action "supprimer".

Cette entité fournirait suffisamment de données pour effectuer des annulations et afficher l'historique des modifications.

Autres conseils

Une des méthodes permettant de conserver les traces d'audit / annulation consiste à marquer chaque version de l'enregistrement d'un objet avec un numéro de version. Trouver la version actuelle constituerait un effort pénible s’il s’agissait d’un numéro de version simple. Il est donc préférable de procéder à une numérotation inversée des versions. "version '0 est toujours la version actuelle et si vous effectuez une mise à jour, les numéros de version de toutes les versions précédentes sont incrémentés. Pour supprimer un objet, vous devez incrémenter les numéros de version des enregistrements actuels et ne pas en insérer un nouveau à 0.

Comparé à une approche attribut par attribut, cela simplifie considérablement les retours en arrière ou les versions historiques, mais prend plus de place.

Hmm, je cherche aussi une réponse à cette question. Jusqu'à présent, le meilleur que j'ai trouvé est le cadre www.jboss.org/envers/, mais même cela me semble être plus de travail que nécessaire.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top