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.
Partager