Alguém consegiu contornar open session in view ao trabalhar com JPA? Poderia compartilhar?
Estou tendo o famoso “LazyInitializationException”, e encontrei diversas soluções porém todas ligadas ao hibernate.
Sendo assim eu teria que implementar o “HibernateUtil” para pegar o session, ficando asssim amarrado ao hibernate…
Ou utilizar algum framework como Spring ou Eclipse Link para controlar o opem session in view. me corrijam se estiver errado…
Estou fazendo assim atualmente…
Salvo um objeto.
getEm().merge(paciente);
getEm().flush();
//retorna o EntityManager
[code]public EntityManager getEm() {
ELContext el = FacesContext.getCurrentInstance().getELContext();
return (EntityManager) FacesContext.getCurrentInstance()
.getApplication().getELResolver()
.getValue(el, null, "entityManager");
}[/code]//Web Filter JPA
[code]public class FiltroJPA implements Filter {
private EntityManagerFactory factory;
@Override
public void destroy() {
this.factory.close();
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException,PersistenceException
{
EntityManager entityManager = this.factory.createEntityManager();
request.setAttribute("entityManager", entityManager);
entityManager.getTransaction().begin();
chain.doFilter(request, response);
try {
entityManager.getTransaction().commit();
} catch (Exception e) {
entityManager.getTransaction().rollback();
} finally {
entityManager.close();
}
}
@Override
public void init(FilterConfig arg0) throws ServletException {
this.factory = Persistence.createEntityManagerFactory("jpa");
}[/code]
Aceito sugestões 
Se você não precisa de conversação e está recebendo esta exceção, bem, isso é um forte indício de que você não planejou suas consultas. Você pode até utilizar o anti-pattern OpenSessionInView para não ter mais este erro, mas você terá, muito provavelmente, consultas N+1.
Tenho um post sobre esse assunto, se você quiser se aprofundar mais.
http://www.guj.com.br/java/231652-alguem-usa-algum-padrao-diferente-de-open-session-in-view-ao-trabalhar-com-jpa
[quote=Flavio Almeida]Se você não precisa de conversação e está recebendo esta exceção, bem, isso é um forte indício de que você não planejou suas consultas. Você pode até utilizar o anti-pattern OpenSessionInView para não ter mais este erro, mas você terá, muito provavelmente, consultas N+1.
Tenho um post sobre esse assunto, se você quiser se aprofundar mais.
http://www.guj.com.br/java/231652-alguem-usa-algum-padrao-diferente-de-open-session-in-view-ao-trabalhar-com-jpa[/quote]
Opa flávio. Estou no início do projeto, ainda da tempo de mudar as consultas.
Você se refere ao Fetch.Lazy por ex?
[quote]
Flavio Almeida wrote:Se você não precisa de conversação e está recebendo esta exceção, bem, isso é um forte indício de que você não planejou suas consultas. Você pode até utilizar o anti-pattern OpenSessionInView para não ter mais este erro, mas você terá, muito provavelmente, consultas N+1.
Tenho um post sobre esse assunto, se você quiser se aprofundar mais.
http://www.guj.com.br/java/231652-alguem-usa-algum...n-in-view-ao-trabalhar-com-jpa
Opa flávio. Estou no início do projeto, ainda da tempo de mudar as consultas.
isso é um forte indício de que você não planejou suas consultas.
Você se refere ao Fetch.Lazy por ex?[/quote]
Bom o tópico não é muito recente, mas estou passando pelo mesmo problema, alguém mais também teve esse problema, e como solucionou?
E qual solução adotaram?
Obrigado desde já pessoal.