Question

J'utilise pour suivre Hibernate Envers toutes les modifications apportées à mes objets de base de données. Ces objets sont liés parfois par un (uni-directionnel) relation parent-enfant. Parce que je besoin de requêtes qui sont censés les objets liste tous supprimés, je compte sur la table d'audit sur les objets pour marquer Envers supprimés (colonne RevType dans le tableau * de _aud). Cependant, ces entrées ne semblent pas être créé pour l'un de mes objets enfant lorsque leur objet parent est supprimé.

Mes regards de la classe d'objet comme celui-ci:

@Entity
@Audited
public class MyClass {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;

@Column(nullable = false, unique = false, length = 1024)
private String name;

    // An object can have exactly one parent, but multiple children
@ManyToOne
@OnDelete(action = OnDeleteAction.CASCADE)
private MyClass parent;

}

Je suis soupçonner qu'il a quelque chose à voir avec la cascade action de suppression qui court-circuite en quelque sorte mise en veille prolongée Envers. Comment puis-je obtenir que les entrées de la table de vérification pour les objets enfants sont créés tout en veillant à ce que tous les enfants sont automatiquement supprimés par la base de données lorsque le parent référencé est supprimé?

Était-ce utile?

La solution

Utilisez-vous @OnDelete et générer le DDL par Hibernate? Dans ce cas, Hibernate ajoutera une « suppression en cascade » sur la relation, ce qui signifie que la suppression des enfants aura lieu en dehors Hibernate. Alors, ou Hibernate (Envers) n'auront pas accès à cet événement, à défaut d'agir sur ce point.

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