Fórum Dúvida sobre persistencia JPA #410560
15/12/2011
0
Tenho a classe Product e a classe Sell!
O relacionamento da classe Product com a classe Sell está da seguinte forma:
@OneToMany(mappedBy=product,cascade= CascadeType.ALL,fetch= FetchType.LAZY)
private List<Sell> sellsOfProduct = new LinkedList<Sell>();
Então decidi criar um método a mais na classe ProductDAO que Dyego nao mencionou na sua aula, foi apenas por experiência.
public List<Sell> getSellsOfProduct(Product prod){
List<Sell> sell = null;
EntityManager em = JPAUtil.getInstance().getEntityManager();
prod = em.find(Product.class, prod.getId());
sell = prod.getSellsOfProduct();
em.close();
return sell;
}
Decidi criar esse método para carregar as vendas do produto apenas quando eu precisar, pela questão de performance da aplicação com o banco de dados.
Se eu adicionar a linha em.getTransaction.commit(); acima da linha em.close();
ACONTECE O SEGUINTE ERRO:
Exception in thread main org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: br.com.completejpa.entity.Product.sellsOfProduct, no session or session was closed
Se eu tirar essa linha carrega normal as vendas do Produto.
Gostaria de saber o porque disso.
Felipe Ramalho
Curtir tópico
+ 0Posts
15/12/2011
Felipe Ramalho
Tenho a classe Product e a classe Sell!
O relacionamento da classe Product com a classe Sell está da seguinte forma:
@OneToMany(mappedBy=product,cascade= CascadeType.ALL,fetch= FetchType.LAZY)
private List<Sell> sellsOfProduct = new LinkedList<Sell>();
Então decidi criar um método a mais na classe ProductDAO que Dyego nao mencionou na sua aula, foi apenas por experiência.
public List<Sell> getSellsOfProduct(Product prod){
List<Sell> sell = null;
EntityManager em = JPAUtil.getInstance().getEntityManager();
prod = em.find(Product.class, prod.getId());
sell = prod.getSellsOfProduct();
em.close();
return sell;
}
Decidi criar esse método para carregar as vendas do produto apenas quando eu precisar, pela questão de performance da aplicação com o banco de dados.
Se eu adicionar a linha em.getTransaction.commit(); acima da linha em.close();
ACONTECE O SEGUINTE ERRO:
Exception in thread main org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: br.com.completejpa.entity.Product.sellsOfProduct, no session or session was closed
Se eu tirar essa linha carrega normal as vendas do Produto.
Gostaria de saber o porque disso.
Não precisa usar o em.getTransaction.begin(); e o em.getTransaction.commit(); quando for fazer apenas leitura no banco de dados??
Gostei + 0
15/12/2011
Davi Costa
att Davi
Gostei + 0
15/12/2011
Robson Teixeira
Quanto ao uso dos metodos begin e o commit você está correto pois esses metodos são mais usados quando vai ser executado comandos dml no banco ou seja insert,update e delete.
att
robson
Gostei + 0
15/12/2011
Felipe Ramalho
att Davi
Davi é isso.. quando eu uso o commit ele lança essa exceção.
Quando eu tiro o commit ele carrega a lista normalmente.
Só queria saber o porque. Mas acho que é do jeito que o
robson disse.
vlw
Gostei + 0
15/12/2011
Felipe Ramalho
Quanto ao uso dos metodos begin e o commit você está correto pois esses metodos são mais usados quando vai ser executado comandos dml no banco ou seja insert,update e delete.
att
robson
acho que é isso mesmo robson.
Obrigado pela atenção!
qualquer dúvida eu abro outro
chamado =D
Gostei + 0
16/12/2011
Davi Costa
att Davi
Gostei + 0
20/12/2011
Dyego Carmo
Resolvido ? Se sim , poderia fechar o chamado ?
Valeu !
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)