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