« Enviar email via EJB | Home | Retirar linha do JTable »
Failed to lazily initialize a collection of role [EJB]
de raydacosta | Quarta, 8 de Outubro de 2008
[LazyInitializationException] failed to lazily initialize a collection of role: ejb.entity.TermSource.termProjs, no session or session was closed
org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: ejb.entity.TermSource.termProjs, no session or session was closed
Recebi o error ao tentar incluir um determinado objeto no BD. Procurei uma solução possivel e não encontrei. Achei um site onde os kras também tem o mesmo problema e falam de algumas soluções paliativas aqui. Em particular eu resolvi este problema carregando o objeto separadamente do pai, ou seja, carrego a pessoa e depois carrego o endereco passando o id para o metodo findById().
Pelo que entendi o Lazy nao carrega as colections dos filhos assim vc tem q carregar na mao mesmo.
Categorias: EJB | | Enviar por e-mail | Hits para esta publicação: 1354






Segunda, 18 de Maio de 2009 at 17:36
Olha resolvi este problema colocando todo os metodos com FetchType.EAGER, ou seja, sempre que necessário usar FetchType, uso EAGER.
Ex: crawlFilters;
@ManyToMany(cascade = { CascadeType.PERSIST, CascadeType.MERGE }, fetch = FetchType.EAGER)
@Fetch(FetchMode.SUBSELECT)
private List
Segunda, 18 de Maio de 2009 at 17:40
Aaaaaaa au usar o List como collection de minhas entidades (Entity) recebi a exception do tipo Bag, para resolver coloquei todos os List’s como Set, ai o problema foi resolvido.
Domingo, 20 de Setembro de 2009 at 20:41
Raydacosta, muito obrigada por explicar sobre o prob lema do FetchType. Eu tava quebrando a cabeça aqui o dia inteiro achando que era algum erro com a sessão, sem pensar na possibilidade de ser com os relacionamentos! Obrigada mesmo! =)
Segunda, 16 de Novembro de 2009 at 09:43
Estou desenvolvendo uma aplicação web utilizando como estrutura:
Struts, Spring 2, Jpa e Hibernate e estou com o mesmo problema :
” d [org.hibernate.LazyInitializationException] - failed to lazily
initialize a collection of role:
br.com.bry.curriculos.pojo.Pessoa.enderecos, no session or session was closed org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: br.com.bry.curriculos.pojo.Pessoa.enderecos, no
session or session was closed at org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:380)”
E eu tenho uma entidade PESSOA que possui uma lista de ENDERECOS em
alguns fóruns falam que necessita outros não.. e como nas duas formas
colocando ou nao o Fetch.EAGER na classe PESSOA acontece o mesmo erro..
===========Pojo de Pessoa
@OneToMany(mappedBy = “pessoa”, targetEntity = Endereco.class, cascade
= CascadeType.ALL,fetch = FetchType.EAGER)
private List enderecos;
public List getEnderecos() {
return enderecos;
}
public void setEnderecos(List enderecos) {
this.enderecos = enderecos;
}
===========Pojo de Endereco
@ManyToOne(targetEntity=Pessoa.class)
@JoinColumn(name=”ID_PESSOA” , nullable=false)
private Pessoa pessoa;
public Pessoa getPessoa() {
return pessoa;
}
public void setPessoa(Pessoa pessoa) {
this.pessoa = pessoa;
}
No arquivo de configuracao do meu web .xml eu utilizo o filter “org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter” …
Gostaria de saber se vc já passou por isso..
Terça, 17 de Novembro de 2009 at 23:51
Puts, nao uso Struts, Spring 2, mas tive realmente problemas semelhantes, uma alternativa foi Usar no lugar da collection usar Set este resolveu o problema por completo, nao sei se é bug ou forma de usar, mas resolveu.. Outra coisa, nao usei muit das anotações nao, meu dá maior rolo… use o minimo…Maximo que usei: @ManyToOne