J'ai rencontré une erreur étrange avec l'hibernation, très probablement due à une mauvaise utilisation de celle-ci, mais je me demandais s'il y avait un moyen d'en trouver la cause profonde et peut-être d'y remédier.
Actuellement, j'ai une hiérarchie de classes qui ressemble à ceci :
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@Table(name = "tbl_class_a)
public ClassA {
...
private int propA;
...
}
@Entity
@Table(name = "tbl_class_b")
public ClassB extends ClassA {
...
@Column(unique = true)
private int propB;
...
}
@Entity
@Table(name = "tbl_class_c")
public ClassC extends ClassC {
...
private int propC;
...
}
J'ai testé de manière approfondie la persistance et la suppression d'objets des trois classes et tout semble fonctionner normalement jusqu'à ce que je considère les contraintes sur les propriétés, notamment en ce qui concerne la persistance.
Maintenant, j'instancie un objet, newObj, de la classe C qui a une valeur de propB qui est égale à un objet persistant tout prêt qui a cette valeur pour son propB. J'essaie de le persister et, comme prévu, une violation de contrainte est déclenchée et je tente d'annuler la transaction. Je m'attendrais à ce que toutes les traces de newObj soient supprimées, mais quelque chose d'extrêmement étrange se produit. Toutes les références à newObj dans les tables de la classe C et de la classe B sont effectivement supprimées, mais les propriétés de la table de la classe A restent, et pour autant que je sache, irrécupérables. Pourquoi ?