Hibernate : Probleme de mapping pour une map avec une table d'association
Bonjour à tous,
je suis débutant en Hibernate et je me heurte à un problème depuis plusieurs jours. Le principe est pourtant relativement simple :
j'ai une table User et une table Collection liées par une table d'association AssocUserCollection.
Script SQL de création de ces tables :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| CREATE TABLE user (
User_id int(10) NOT NULL auto_increment,
User_login varchar(45) NOT NULL,
User_password varchar(45) NOT NULL,
PRIMARY KEY (User_id),
);
CREATE TABLE collection (
Collection_id int(10) NOT NULL auto_increment,
Collection_name varchar(45) NOT NULL,
PRIMARY KEY (Collection_id),
);
CREATE TABLE assoccollectionuser (
Collection_id int(10) NOT NULL,
User_id int(10) NOT NULL,
PRIMARY KEY (User_id,Collection_id),
CONSTRAINT FK_Collection FOREIGN KEY (Collection_id) REFERENCES collection (Collection_id),
CONSTRAINT FK_User FOREIGN KEY (User_id) REFERENCES user (User_id)
); |
Mon problème est le suivant :
Je voudrais que ma classe User (mappée à la table du même nom) contienne une Map<String, Collection> avec en clé le nom de la collection (collection_name).
J'ai donc essayé ça :
Code:
1 2 3 4 5
| <map name="collections" table="assocCollectionUser">
<key column="user_id" />
<map-key type="string" column="collection_name"></map-key>
<many-to-many column="collection_id" class="Collection"/>
</map> |
Le problème c'est qu'Hibernate cherche dans la table d'association et non dans la table Collection la colonne 'collection_name', et donc forcément ça plante.
Y a-t-il un moyen de résoudre ce problème ?
PS : j'ai réussi à trouver une solution relativement moche en mettant :
Code:
1 2 3
| ...
<map-key type="string" column="collection1_1_.collection_name"></map-key>
... |
collection1_1_ étant l'alias de la table collection utilisé par Hibernate d'après la requête SQL que j'ai récupérée.