Bonjour, j'ai un Bean qui est @ManagedBean et @SessionScoped,
dans une de ses méthodes privées

de la j'appel MaFacade.findBySt

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
                final List<ParentEntity> parents = MaFacade.findBySt(oldId);
                for (final Parent parent : parents ) {
                    for (EnfantEntity enfant : parent.getEnfants()) {
                        enfant.setIdNull();
                    }
                }
Dans ma classe final MaFacade j'ai
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
 
    public static List<ParentEntity> findByStr(final Integer pId) {
        final EntityManager em = EntityManagerUtils.createEntityManager();
        try {
            final Query findAllByStr = em.createNamedQuery("ParentEntity.findByStr");
            findAllByStr.setParameter("strId", pId);
            final List<ParentEntity> res = findAllByStr.getResultList();
            /*
            for (final ParentEntity parent : res) {
                for (EnfantEntity enfant : parent.getEnfants()) {
                }
            }    
            */     
            return res;
        } finally {
            EntityManagerUtils.close(em);
        }
    }
Dans la liaison parent enfants dans mon entitée, si je suis EAGER tout bien

getEnfants de ParentEntity, si je suis EAGER tout va bien car car getResults est appelé automatiquement à la création de
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
    @OneToMany(mappedBy = "enfant", fetch = FetchType.EAGER)//LAZY
    public List<EnfanttEntity> getEnfants() {
        if (_enfants == null) {
            _enfants = new ArrayList<EnfantEntity>();
        }
        return _enfants;
    }
mais si je passe LAZY
et bien j'ai org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: fr.ParentEntity.enfants, no session or session was closed
effectivement, au moment où j'appel getEnfants, il ne sont pas encore chargé en lazy et mon EntityManager est déjas close
mais bon, mon ManagedBean est @SessionScoped !

je peut décommenter mais appels à parent.getEnfants() pour que cela refonctionne mais cela ramène un peut à faire du EAGER!

Es-ce bien d'avoir mis mes bean en SessionScoped, ne devrai-je pas me mettre en RequestScoped et faire un close de l'EntityManager à la fin de ses Scopes?
Je croyais qu'il fallait éviter de tout monter en session, cela est il justifiable en JSF / PrimeFaces, il y il une raison de le faire?
Que me conseillez vous?