J'ai 2 entités comme celui-ci:Hibernate supprimer douce ensembles clé étrangère null
@SQLDelete(sql = "UPDATE parent_table SET deleted = true WHERE id = ?")
public class Parent {
private boolean deleted;
@OneToMany(cascade = CascadeType.ALL)
@JoinColumn(name = "parent_id")
private List<Child> children;
// other stuff
}
@SQLDelete(sql = "UPDATE child_table SET deleted = true WHERE id = ?")
public class Child {
private boolean deleted;
// stuff
}
Comme vous pouvez le voir, est un mappage de @OneToMany unidirectionnel et les deux entités utilisent supprimer doux avec l'annotation @SQLDelete
. J'essaye de supprimer le parent et de le supprimer à son tour. Lorsque j'essaie de supprimer en douceur, il définit l'indicateur deleted
sur true dans les deux tables et c'est ce que je veux.
Toutefois, le parent_id
dans child_table
est défini sur null
lorsque j'effectue la suppression. Pourquoi cela se passe-t-il et comment puis-je arrêter cela?
L'opération de suppression:
Parent parent= entityManager.find(Parent.class, id);
entityManager.remove(parent);
Le parent est en cours de suppression, comme il devrait l'être non? Recherchez la suppression en cascade. –
L'indicateur de suppression est défini et c'est exactement ce que je veux. Mais hibernate détruit également la relation parent-enfant en plaçant la clé étrangère dans 'child_table' à' null'. – Neeraj
La destruction de la relation parent-enfant lors de la cascade de l'opération de suppression du parent vers des enfants privés est logique et Hibernate ne sait pas (ou ne se soucie pas) de ce que fait la requête de '@ SQLDelete'. Pour cette raison, je soupçonne fortement que ce que vous demandez est impossible. – crizzis