Bonjour à tous !
Je me mets depuis peu à hibernate et je suis confronté à un problème qui me rend chèvre.
Donc j'ai une classe entité commande qui doit avoir une relation oneToMany unidirectionnelle avec une autre classe entité nommée produit.
Voici le code de la jointure dans la classe commande :
Je n'ai pas d'erreur d'execution lorsque je compile et execute les créations de tables (j'utilise Maven).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 List<Produit> produits = new ArrayList<Produit>(); @OneToMany(cascade={CascadeType.ALL}) @JoinTable( name="produitsCommande", joinColumns=@JoinColumn(name="produit_id",unique=false), inverseJoinColumns=@JoinColumn(name="idCommande",unique=false) ) public List<Produit> getProduits() { return this.produits; } public void setProduits(List<Produit> prods) { this.produits = prods; }
Seulement lorsque je lance des tests unitaires en créant deux produits, et que je lance mon test unitaire de création de commande avec comme liste de produits les 2 produits créés précédemment, je me retrouve avec une table de jointure comme ceci :
+------------+------------+
| produit_id | idCommande |
+------------+------------+
| 1 | 1 |
| 1 | 2 |
+------------+------------+
Ce qui n'est absolument pas logique, l'inverse devrait être fait, avec deux idCommande à 1 (l'id en lui même) et les produit_id devraient être à 1 et 2.
Si je me débrouille pour paramétrer l'inverse, alors la contrainte d'unicité sur idCommande m'empêche d'enregistrer la commande avec une erreur du style "Duplicate entry '1' for key 1"...
Ma question finalement est : comment paramétrer simplement une relation oneToManu unidirectionnelle ?
D'avance merci.
![]()
Partager