Initialiser les clés d'une Map
Bonjour,
Alors je ne pense pourtant pas vouloir faire une chose extraordinaire, cependant ça fait deux jours que je cherche un peu partout sur le net, je ne suis pas parvenu à trouver la solution à mon problème.
Edit : J'utilise Spring et Hibernate.
Le problème étant que j'ai une Map (java.util) d'objet :
Code:
private Map<Skill, Level> skill;
J'ai mappé donc la classe contenant cette Map à l'aide d'un fichier hbm, tout se passe bien jusqu'ici.
Code:
1 2 3 4 5 6
|
<map name="skill" table="QUESTION_SKILL_LEVEL">
<key column="FK_ID_QUESTION" not-null="true" />
<index-many-to-many column="FK_ID_SKILL" class="Skill" />
<many-to-many column="FK_ID_LEVEL" class="Level" />
</map> |
Le problème survenant lorsque je veux accéder à cette dernière. Une classe controller réalisant ceci :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
List<Session> session = ((Session) appCtx.getBean("session")).getAvailableSessions();
for (Session session2 : session) {
for(Question q : session2.getQuestions()){
for(Level l : q.getSkill().values()){
System.out.println(l.getDescriptionKey());
// Marche
}
for(Skill s : q.getSkill().keySet()){
System.out.println(s.getDescriptionKey());
// Marche pas => LazyInitializationException
}
}
} |
La méthode getSkill() retourne donc la map. La map est bien retournée, et le pire étant que les valeurs sont bien initialisées, mais pas les clés !
Ci-après la requête appelée pour obtenir ce résultat :
Code:
1 2 3 4 5 6 7 8 9
|
Sessions = getHibernateTemplate().find(
"SELECT distinct s "
+"FROM Session as s "
+"join fetch s.questions as quest "
+"join fetch quest.skill as skill "
+"WHERE s.startingDate >= ? ",
new Object[] {minDate}
); |
Donc la LazyInitializationException est retournée parce que "join fetch quest.skill as skill " (skill étant la Map) ne charge que les valeurs de la map (Je suppose)
D'où ma question : Comment charger les clés de cette Map afin de ne pas avoir mon exception ^^
Un grand merci d'avance parce que là franchement je vois pas du tout comment contourner le problème :?