Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: br.com.casadocodigo.loja.models.Produto.precos, could not initialize proxy - no Session]

Estou tendo um erro HTTP500 quando tento executar o codigo Publiquei no repositório: https://github.com/mburatti/casadocodigo_Buratti

creio que não entendi como o hibernate cria o objeto ou como é criada a sessão. Porem o mesmo não ocorre no formulario de envio de dados para o banco.

Segue o erro:

Hibernate: select produto0_.id as id1_0_, produto0_.descricao as descrica2_0_, produto0_.paginas as paginas3_0_, produto0_.titulo as titulo4_0_ from Produto produto0_
jan 11, 2018 9:47:49 AM org.apache.catalina.core.StandardWrapperValve invoke
GRAVE: Servlet.service() for servlet [dispatcher] in context with path [/casadocodigo] threw exception [Request processing failed; nested exception is org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: br.com.casadocodigo.loja.models.Produto.precos, could not initialize proxy - no Session] with root cause
org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: br.com.casadocodigo.loja.models.Produto.precos, could not initialize proxy - no Session...
6 respostas

Fala ai Michael, tudo bem ?

Entrei no seu código agora e não consegui ver a parte do preço, parece que você não mandou para github.

Consegue atualizar lá ? Ou manda aqui para gente ver ?

Fiz commit do código no GitHub.

Tenta fazer o seguinte

Na classe produto instanciar a listagem de preços :

private List<Preco> precos = new ArrayList();

E vê se funciona

Tentei fazer isso mas o erro continua:

import java.util.ArrayList;
import java.util.List;

import javax.persistence.ElementCollection;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
public class Produto {
    private String titulo;
    private String descricao;
    private int paginas;

    @Id @GeneratedValue(strategy=GenerationType.IDENTITY)
    private int id;

    @ElementCollection
    private List<Preco> precos = new ArrayList<Preco>();
solução!

Resolvi o problema quando comentei a linha toString da ProdutosController.java. Logo há algo errado no metodo toString. Resolvi comentar a linha "preços: " + precos + mas não compreendi por que isso causou o problema...

public ModelAndView listar() {        
        List<Produto> produtos = produtoDao.listar();
        //System.out.println(produtos.toString());
        ModelAndView modelAndView = new ModelAndView("/produtos/lista");
        modelAndView.addObject("produtos",produtos);
        return modelAndView;
    }


Produto.java

    @Override
    public String toString() {
        return "Produto [titulo=" + titulo + 
                ", descricao=" + descricao + 
                ", paginas=" + paginas + 
                "preços: " + precos + 
                "]";
    }

Ele tentava mostrar os valores e como não tinha buscado ainda ele gerava essa exception