o objeto ate entao tava com a lista null, ai quando ele entra no if ele gera uma consulta e traz todos os acompanhantes que estao no BD, por que isso? :shock:
Isso era pra dar um lazyInitializationException nao?
Se a conexão estiver aberta não vai dar esse erro.
evertonsilvagomesjav
Eu uso uma instancia so do EntityManager, mas pq ta fazendo a consulta tem ideia?
lele_vader
Quando você chama getListAcompanhantes() ele traz a lista que é lazy.
Mostra o resto do código lá para ver se você fechou a conexão antes e daí não casou lazy initialization exception.
Rodrigo_Sasaki
Você está utilizando EJBs? Por acaso ele seria Stateful ?
Hebert_Coelho
Eu uso uma instancia so do EntityManager, mas pq ta fazendo a consulta tem ideia?Tome cuidado na hora de começar usar um framework sem antes entende-lo.
Você precisa entender que o lazy irá ser carregado toda vez que você chamá-lo. Se ñ tiver conexão ativa uma mensagem de erro será exibida, mas caso exista uma conexão ativa a consulta será feita. Esse é o comportamento do LAZY.
Oq tem haver usar ou ñ instancia do EntityManager, ñ entendi… :S
evertonsilvagomesjav
Eu uso uma instancia so do EntityManager, mas pq ta fazendo a consulta tem ideia?Tome cuidado na hora de começar usar um framework sem antes entende-lo.
Você precisa entender que o lazy irá ser carregado toda vez que você chamá-lo. Se ñ tiver conexão ativa uma mensagem de erro será exibida, mas caso exista uma conexão ativa a consulta será feita. Esse é o comportamento do LAZY.
Oq tem haver usar ou ñ instancia do EntityManager, ñ entendi… :S
Falei que uso uma instancia do entityManager, sendo assim tenho uma conexao pra aplicação inteira. Teria como vc me ajudar? Veja como busco o entityManager e como estou usando.
Uso um DAO generico e nele eu tenho meu EntityManager dessa forma:
public static GenericDaoBeanAgenciaTurismo getInstance(){
if(dao == null){
return dao = new GenericDaoBeanAgenciaTurismo(HibernateUtils.getEntityManager());
}else{
return dao;
}
}
Aqui vem o EntityManager
public static EntityManager getEntityManager(){
if(em == null){
EntityManagerFactory emf = Persistence.createEntityManagerFactory("AgenciaTurismoEntityManager");
em = emf.createEntityManager();
}
return em;
}
Então eu nao fecho a conexão hora nenhuma, os métodos utilizados no DAO estão assim por exemplo:
public <T> List<T> consultaTodos(Class<T> type) {
List<T> list = null;
Query query = getEntityManager().createQuery(
"Select a from " + type.getName() +" a");
list = query.getResultList();
return list;
}
A unica coisa e que nos inserts eu abre e fecho a transaçao.
Deu pra entender?
evertonsilvagomesjav
lele_vader:
Quando você chama getListAcompanhantes() ele traz a lista que é lazy.
Mostra o resto do código lá para ver se você fechou a conexão antes e daí não casou lazy initialization exception.
Eu teria que fechar a conexão quando? Pois nao estou fechando hora nenhuma…
O ideal seria que a cada transação com o banco eu fechar? entityManager.close()?
Fiz assim e funcionou da forma q eu queria, so nao sei se e o mais correto, todas as vezes q utilizo o BD com o entityManager no final to fechando dando um entityManager.close() daí todas as vezes que vou utilizar de novo eu crio um novo entityManager assim:
EntityManagerFactory emf = Persistence.createEntityManagerFactory("AgenciaTurismoEntityManager");
em = emf.createEntityManager();