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 sql : 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
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 xml : Sélectionner tout - Visualiser dans une fenêtre à part
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 xml : Sélectionner tout - Visualiser dans une fenêtre à part
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.