[Hibernate Tools hbm2java] A Foreign key refering A from B has the wrong number of column.
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:
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:
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:
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.