J'ai simplifié en prenant un exemple plus parlant.
J'utilise JPA avec Hibernate et Mysql.

Pour le contexte, on imagine que l'application concerne une gestion de personnes vivant en Belgique et que chaque personne appartient à un groupe au maximum ou à aucun.

Voici le détail de mes classes.

J'ai crée une classe Personne qui possède une relation OnetoOne facultatif avec un groupe belge.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
 @OneToOne(cascade = CascadeType.ALL, fetch=FetchType.LAZY,optional=true )
 	 @JoinColumn(name = "groupe", unique = true)
 	 private Groupe groupe;
Dans ma classe Groupe, j'ai une relation vers les personnes qui appartienent au groupe:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
@OneToMany(mappedBy = "groupe", cascade = CascadeType.ALL)
	 private Set<Personne> personnes= new HashSet<Personne>();

La conséquence au niveau de la base de données est qu'il y a une contrainte nommée groupe dans la table personne qui peut être vide ou pas

Il y a aussi une table Groupe qui possède en clé primaire le numéro de groupe (id) ainsi que d'autres champs nécessaire à la description du groupe(obligatoire).


J'ai crée mes objets et je les ai persisté en base et ça marche.
J'ai tenté d'éditer un attribut d'un objet Groupe et de le persister, ça marche.

Par contre, j'ai tenté de supprimer un Groupe et il génère l'erreur suivante qui me semble logique :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
ATTENTION: SQL Error: 1451, SQLState: 23000
30 juin 2009 19:32:43 org.hibernate.util.JDBCExceptionReporter logExceptions
GRAVE: Cannot delete or update a parent row: a foreign key constraint fails (`pkr`.`personne`, CONSTRAINT `FK3305B93C789737` FOREIGN KEY (`groupe`) REFERENCES `groupe ` (`id`))

Ma question est donc comment je peux modifier mon modèle pour permettre la suppression d'un groupe sans autant supprimer les personnes appartenant à ce groupe. En effet, une personne peut appartenir à 0 ou 1 groupe.



Merci beaucoup