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 :
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;
}
...
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
 
...
@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