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 :

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;
	}
 
}
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
 
@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;
	}
}
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
 
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
Du coup je ne comprends pas ce qui a pu foirer.
Merci d'avance.