Petite question NHibernate/Hibernate.
J’ai 2 tables legacy avec des « composite-id ».
Table A**********Table B Champ1 (PK) N --> 1 Champ1 (PK) Champ2 (PK) Champ3 (PK) Champ4 (FK) N --> 1 Champ4 (PK) Champ5 (FK) N--> 1 Champ5 (PK) Autres … ********** Autres…
Si on prends la table A, par exemple, on voit que 3 champs composent sa clé (composite-id… arghhhhh) et que l’un de ses champs, soit le Champ1 sert aussi de foreign key pour se plugger à la table B.
Voici un extrait du fichier A.hbm.xml :
<composite-id name=’’Id’’ class=’’TableAId’’ > <key-property name=’’Champ1’’ /> <key-property name=’’Champ2’’ /> <key-property name=’’Champ3’’ /> </composite-id> <many-to-one name=’’B’’ class=’’TableB’’> <column name=’’Champ1’’ /> <column name=’’Champ4’’ /> <column name=’’Champ5’’ /> </many-to-one>
Comme vous voyez, j’ai besoin de « mapper » Champ1 dans mon composite-id pour ma clé primaire, mais je dois aussi le « mapper » pour ma référence dans ma relation « many-to-one ».
Aucun problème quand vient le temps de faire un «SELECT », ça marche #1! Quand je viens pour faire un « INSERT » ou un « UPDATE » par contre… oufff… là ça me chie une affaire du genre : Invalid index n for this SqlParameterCollection with Count=n
Quand je fouille sur les forums, je vois bien que mon problème est que je « mappe » 2 fois le Champ1. Et ils disent tous, « Tu dois en éliminer un »… mais ça c’est vrai quand tu « mappes » le champ seul et que tu le « mappes » dans une relation. Mais dans mon cas, ce sont 2 relations qui ont besoin d’être « mappées » !!!
Qu’est-ce que je fais ???
Je ne veux pas en venir à défaire mon lien « many-to-one » à cause d’un problème de conception dans Hibernate…
|