Bonjour,

J'essaie de réaliser le mapping d'une table de jointure contenant plus attributs supplémentaires. Tout ce passe bien pour les principaux attributs mais lorsque je réalise le mapping d'une map je rencontre l'erreur suivante:

org.hibernate.PropertyAccessException: could not get a field value by reflection getter of com.eh.servjava.metier.HotelhasOperationCategorie$Id.idHotel
at org.hibernate.property.DirectPropertyAccessor$DirectGetter.get(DirectPropertyAccessor.java:35)
at org.hibernate.tuple.component.AbstractComponentTuplizer.getPropertyValue(AbstractComponentTuplizer.java:64)
at org.hibernate.tuple.component.AbstractComponentTuplizer.getPropertyValues(AbstractComponentTuplizer.java:70)
at org.hibernate.tuple.component.PojoComponentTuplizer.getPropertyValues(PojoComponentTuplizer.java:86)
at org.hibernate.type.ComponentType.getPropertyValues(ComponentType.java:353)
at org.hibernate.type.ComponentType.getHashCode(ComponentType.java:184)
at org.hibernate.engine.EntityKey.generateHashCode(EntityKey.java:104)
at org.hibernate.engine.EntityKey.<init>(EntityKey.java:48)
at org.hibernate.engine.StatefulPersistenceContext.getCollectionOwner(StatefulPersistenceContext.java:678)
at org.hibernate.loader.Loader.readCollectionElement(Loader.java:993)
at org.hibernate.loader.Loader.readCollectionElements(Loader.java:646)
at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:591)
at org.hibernate.loader.Loader.doQuery(Loader.java:701)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
at org.hibernate.loader.Loader.loadCollection(Loader.java:1994)
at org.hibernate.loader.collection.CollectionLoader.initialize(CollectionLoader.java:36)
at org.hibernate.persister.collection.AbstractCollectionPersister.initialize(AbstractCollectionPersister.java:565)
at org.hibernate.event.def.DefaultInitializeCollectionEventListener.onInitializeCollection(DefaultInitializeCollectionEventListener.java:60)
at org.hibernate.impl.SessionImpl.initializeCollection(SessionImpl.java:1716)
at org.hibernate.collection.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:344)
at org.hibernate.collection.AbstractPersistentCollection.read(AbstractPersistentCollection.java:86)
at org.hibernate.collection.PersistentMap.toString(PersistentMap.java:251)
at java.lang.String.valueOf(String.java:2827)
at java.io.PrintStream.println(PrintStream.java:771)
at com.eh.servjava.run.ServJava.configTemplate(ServJava.java:764)
at com.eh.servjava.run.ServJava.envoiResa(ServJava.java:344)
at com.eh.servjava.run.Test.main(Test.java:59)
Caused by: java.lang.IllegalArgumentException: Can not set java.lang.Integer field com.eh.servjava.metier.HotelhasOperationCategorie$Id.idHotel to java.lang.Integer
at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:146)
at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:150)
at sun.reflect.UnsafeFieldAccessorImpl.ensureObj(UnsafeFieldAccessorImpl.java:37)
at sun.reflect.UnsafeObjectFieldAccessorImpl.get(UnsafeObjectFieldAccessorImpl.java:18)
at java.lang.reflect.Field.get(Field.java:358)
at org.hibernate.property.DirectPropertyAccessor$DirectGetter.get(DirectPropertyAccessor.java:32)
... 26 more


Voici mon fichier de mapping:

<class name="HotelhasOperationCategorie" table="V2_Hotel_has_OperationCategorie" mutable="false">
<composite-id name="id" class="HotelhasOperationCategorie$Id" >
<key-property name="idHotel" access="field" /> <!-- access="field" -->
<key-property name="idCategorie" access="field" /><!-- access="field" -->

</composite-id>

<property name="prioritaire" type="int" />
<property name="code" type="string" />
<property name="idLibelleInfo" type="int" />



<many-to-one name="hotel" class="Hotel" column="idHotel" not-null="true" insert="false" update="false"/>
<many-to-one name="operationCategorie" class="OperationCategorie" column="idCategorie" not-null="true" insert="false" update="false" />

<map name="libelles" table="V2_LibelleTranslation" where="tableNom='V2_Hotel_has_OperationCategorie'" >
<key property-ref="idLibelleInfo" column="idLibelle" />
<map-key column="langue" type="string" />
<element column="libelle" type="string" />
</map>

</class>

La seule différence avec mes autres fichiers de mapping contenant une map, c'est que la clé de cette classe est composé...

Je précise que si je retire le mapping de la map, tout fonctionne bien. J'utilise pourtant le meme mapping dans d'autres classes sans problème. Et dernier point, lors de la récupération des données, si la map est vide, tout se passe bien.

Merci de votre aide.