J'ai le cas d'utilisation suivant: Il existe une classe appelée Modèle et avec cette classe je peux créer des instances de la classe ActualObject (ActualObject copie ses données initiales à partir du modèle). La classe Template a une liste de Product: s.Masquage d'objets supprimés
Maintenant, voici la partie délicate, l'utilisateur devrait être en mesure de supprimer des produits de la base de données, mais ces suppressions peuvent ne pas affecter le contenu d'un modèle. En d'autres termes, même si un produit est supprimé, le modèle doit toujours y avoir accès. Cela pourrait être résolu en ajoutant un drapeau "supprimé" au produit. Si un produit est supprimé, il peut ne pas être recherché explicitement dans la base de données, mais il peut être extrait implicitement (par exemple via la référence dans la classe Template). L'idée sous-jacente est que lorsqu'un objet ActualObject est créé à partir d'un modèle, l'utilisateur est averti dans l'interface utilisateur que "Le modèle X a un produit Z avec les paramètres A, B et C, mais ce produit a été supprimé et ne peut pas être ajouté en tant que tel dans ActualObject Z ".
Mon problème est de savoir comment je devrais marquer ces objets supprimés comme effacés. Avant que quelqu'un suggère que juste mettre à jour l'indicateur de suppression au lieu de faire une requête de suppression réelle, mon problème n'est pas si simple. L'indicateur de suppression et son comportement doivent exister dans tous les POJO, pas seulement dans le produit. Cela signifie que je vais avoir des problèmes de cascade. Par exemple, si je supprime un modèle, les produits doivent également être supprimés et chaque produit doit faire référence à un objet prix qui doit également être supprimé et chaque prix peut faire référence à un objet TVA et ainsi de suite. Tous ces objets en cascade doivent être marqués comme supprimés.
Ma question est comment puis-je accomplir cela de manière sensée. Passer en revue chaque objet (qui est en train d'être supprimé) vérifier chaque champ pour les références qui devraient être supprimées, en passant par leurs références etc. est assez laborieux et les bogues sont faciles à glisser. Hibernate aurait de telles fonctionnalités intégrées. Une autre idée à laquelle je pensais était d'utiliser les intercepteurs Hibernate pour modifier une requête de suppression SQL réelle à une requête de mise à jour (je ne suis même pas sûr à 100% que c'est possible). Ma seule préoccupation est que Hibernate utilise des cascades dans les clés étrangères, en d'autres termes, les suppressions en cascade sont effectuées par la base de données et non par hibernate.
Pourquoi avez-vous besoin de cascade? Marquez simplement le produit, puis, à partir du Pojo, faites flotter les clés étrangères vers le produit ou en charge depuis le filtre db par l'indicateur supprimé dans le produit. c'est à dire tenir le drapeau supprimé en un seul endroit – Mark