Bonjour,
Voici mon problème : je gère une liste de "Item" possédant un id (PK) et un nom et une liste de "Sous-Item" possédant un id (PK) et un nom.
La relation entre les deux types est qu'un Item possède plusieurs Sous-Item et qu'un même Sous-Item peut appartenir à plusieurs Items.
Dans ma base j'ai donc déclaré une table SousItem_has_Item avec 2 FK : Item_id et SousItem_id.
En utilisant l'outil de génération de code de Hibernate Tools j'ai obtenu les classes avec le mapping suivant entre les deux entités :
et SousItem :
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
28
29 /** * Item generated by hbm2java */ @Entity @Table(name = "Item", catalog = "suIVVi") public class Item implements java.io.Serializable { private ItemId id; private String itemNom; private Set<SousItem> sousItems = new HashSet<SousItem>(0); //... @ManyToMany(fetch = FetchType.LAZY) @JoinTable(name = "SousItem_has_Item", catalog = "suIVVi", joinColumns = { @JoinColumn(name = "Item_Item_id", nullable = false, updatable = false), @JoinColumn(name = "Item_VersionProduit_VersionProduit_id", nullable = false, updatable = false), @JoinColumn(name = "Item_VersionProduit_Produit_idProduit", nullable = false, updatable = false), @JoinColumn(name = "Item_VersionProduit_Produit_Questionnaire_Questionnaire_id", nullable = false, updatable = false) }, inverseJoinColumns = { @JoinColumn(name = "SousItem_SousItem_id", nullable = false, updatable = false) }) public Set<SousItem> getSousItems() { return this.sousItems; } public void setSousItems(Set<SousItem> sousItems) { this.sousItems = sousItems; } }
Lorsque je veux exécuter mon programme j'ai le message d'erreur suivant :
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 @Entity @Table(name = "SousItem", catalog = "suIVVi") public class SousItem implements java.io.Serializable { private SousItemId id; private String sousItemNom; private Set<Item> items = new HashSet<Item>(0); //... @ManyToMany(fetch = FetchType.LAZY) @JoinTable(name = "SousItem_has_Item", catalog = "suIVVi", joinColumns = { @JoinColumn(name = "SousItem_SousItem_id", nullable = false, updatable = false) }, inverseJoinColumns = { @JoinColumn(name = "Item_Item_id", nullable = false, updatable = false) }) public Set<Item> getItems() { return this.items; } public void setItems(Set<Item> items) { this.items = items; } }
Du coup je ne comprends pas ce qui a pu foirer.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in class path resource [ApplicationContextDao.xml]: Invocation of init method failed; nested exception is org.hibernate.AnnotationException: A Foreign key refering fr.csie.dao.entities.SousItem from fr.csie.dao.entities.Item has the wrong number of column. should be 2
Merci d'avance.
Partager