Solution :
C'est bien simple, mon code est parfaitement juste, mais je n'appelais pas la bonne méthode dans mon EJB... Je laisse le poste comme référence.
Bonjour,
Je m'essaie au développement web avec Javaee. J'utilise les technologies suivantes :
JBoss 5.01
EJB 3.0
Entity
Je me trouve confronté au problème suivant. J'ai une relation @ManyToMany, avec le fetch laissé par défaut à Lazy, mais compensé par un "left join fetch" dans la requête. Et pourtant, Jboss me sort une LazyInitializationException lorsque j'essaie d'accéder aux Tags d'un objet Answer après que la session ait été fermée (retour de la méthode de l'EJB).
Je sèche un peu. En forçant fetch=FetchType.EAGER, l'exception disparaît bien évidemment, mais je ne veux pas utiliser cette technique (et j'aime bien aller au bout des choses). Quelqu'un aurait-il une idée ?
Voici la situation :
Depuis un EJB3, je réalise la requête EJB-QL suivante :
Code : 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
21
22 @Entity Answer ... List<Tag> tags; ... @ManyToMany public List<Tag> getTags() { return tags; } ... @Entity Tag ... List<Answer> answers; ... @ManyToMany(mappedBy="tags") public List<Answer> getAnswers() { return answers; } ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 ... @PersistenceContext private EntityManager em; ... @Override public List<Answer> getList() { Query query = em.createQuery("SELECT distinct a FROM Answer a left join fetch a.tags ORDER BY a.notation"); List<Answer> result = query.getResultList(); return result; }
Merci pour votre précieuse aide.
edit : un problème équivalent là http://www.coderanch.com/t/321446/EJ...etch-but-still
Partager