J'ai la configuration suivante: il existe diverses entités (Projects
, Tests
, Users
) et puis il y a TestReports
. Le TestReports
référence les autres entités et également quelques données supplémentaires dans le système de fichiers.Référencement des entités supprimées dans JPA/Hibernate
Les rapports sont générés et ne sont jamais supprimés (pour l'audit). Cependant, les autres entités peuvent être supprimées. Cela conduit à la situation, lorsque le rapport fait référence à une entité supprimée. C'est OK du point de vue commercial, le rapport pourrait simplement afficher [deleted id123]
au lieu de l'étiquette de l'entité supprimée et ce serait bien. Cependant, je reçois javax.persistence.EntityNotFoundException
, quand j'essaye de charger un rapport qui référence l'entité supprimée.
Existe-t-il un moyen de dire à Hibernate/JPA de créer simplement un objet fantôme avec ID et un drapeau isDeleted
dans un tel cas?
Dans la documentation Hibernate Envers, j'ai constaté qu'ils supportaient quelque chose comme ça en parcourant l'historique des révisions, mais je n'ai pas trouvé le moyen de l'utiliser dans les entités 'normales'.
De la documentation Envers:
Le second paramètre, selectDeletedEntities, spécifie si les révisions, dans laquelle l'entité a été supprimée doivent être inclus dans les résultats. Si oui, ces entités auront le type de révision DEL et tous les champs, à l'exception de l'id, null.
Je suis au courant de solution en introduisant deleted
drapeau sur tous les objets et utiliser si pour douce suppression, au lieu de la suppression réelle. Mais cela ajoute un surcoût supplémentaire, que je voudrais éviter.
Merci, cela semble presque ce que je voulais. Savez-vous s'il existe une façon standard de faire la distinction entre aucune référence réelle et ignorée non trouvée? – Michal
Je ne sais pas et je ne pense pas que Hibernate offre une telle facilité: S. – Augusto