Bonjour à tous,
Je fais fasse à un probleme bizarre avec Jpa.
J'ai une relation many ToMany entre deux entités avec une table de jointure qui contiens les clé primaires des deux autres table en tant que clé étrangères.
J'utilise plusieurs stratégie d'héritage des deux coté de la relation :
D'un coté Oeuvre > Oeuvre Cinematographic > Film ( série etc.), de l'autre Être Vivant > personnages > personnes
Lorsque je supprime un personnage lié à une œuvre à parti de mon application, donc un remove à partir du gestionnaire d'entité, le personnage est supprimé malgré le fait qu'il soit lié à l’œuvre à travers la table de jointure.
Ça ne fonctionne pas lorsque je fais la suppression à partir de Mysql Workbensh ou la contrainte est bien respecté, donc JPA semble se foutre complétement des contraintes.
Voici la configuration des mes entités pour la première hiérarchie de classe :
Et la seconde hierarchie :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 @Entity @DiscriminatorColumn(name = "TYPEOEUVRE",discriminatorType = DiscriminatorType.INTEGER) @Table(name="Oeuvre") public abstract class EtyOeuvre extends EtyAbstract implements ItCompositeInfo,Comparable<EtyOeuvre> { @ManyToMany(cascade ={ CascadeType.PERSIST},fetch = FetchType.EAGER) @JoinTable(name="oeuvres_characters", joinColumns = @JoinColumn(name="oeuvres_ID"),inverseJoinColumns = @JoinColumn(name="characters_ID")) @OrderBy("last_name,first_name ASC") protected List<EtyCharacter> characters = new LinkedList<EtyCharacter>(); } @MappedSuperclass public class EtyOeuvreCinematographic extends EtyOeuvre { } @Entity @DiscriminatorValue("1") public class EtySerieTv extends EtyOeuvreCinematographic { }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 @Entity @DiscriminatorColumn(name = "TYPEHUMAN",discriminatorType = public abstract class EtyHuman extends EtyAbstract implements Comparable<EtyHuman>{ } @Entity @DiscriminatorValue("0") public class EtyCharacter extends EtyHuman { @ManyToMany(mappedBy = "characters",cascade = CascadeType.PERSIST,fetch = FetchType.EAGER) private List<EtyOeuvre> oeuvres; }Est que vous avez déjà entendu parler de ce genre de problème, je ne sais pas si quelque chose cloche dans ma configuration ou si il s'agit d'un bug connu.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 CREATE TABLE `oeuvres_characters` ( `characters_ID` int(11) NOT NULL, `oeuvres_ID` int(11) NOT NULL, PRIMARY KEY (`characters_ID`,`oeuvres_ID`), KEY `FK_oeuvres_characters_oeuvres_ID` (`oeuvres_ID`), CONSTRAINT `FK_oeuvres_characters_characters_ID` FOREIGN KEY (`characters_ID`) REFERENCES `human` (`ID`), CONSTRAINT `FK_oeuvres_characters_oeuvres_ID` FOREIGN KEY (`oeuvres_ID`) REFERENCES `oeuvre` (`ID`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; oeuvres_charactersSELECT * FROM projecttfe.human;
Merci d'avance pour votre aide !
Partager