Ainda não tem acesso? Estude com a gente! Matricule-se
Ainda não tem acesso? Estude com a gente! Matricule-se

Solucionado (ver solução)

Duvida Lazy e Eagle

Boa tarde, queria entender porque no relacionamento que fizemos de Topico para resposta (OneToMany), nao precisamos declarar como fetch Eagle e não gerou erro algum na hora de imprimir a resposta( testei inserido uma resposta associada e funcionou), porem quando fizemos o relacionamento usuario/perfil, tentei deixae sem coloca o fetch.Eagle, porem gerou esse erro.


org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: br.com.alura.forum.model.Usuario.perfis, could not initialize proxy - no Session
    at org.hibernate.collection.internal.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:602) ~[hibernate-core-5.3.18.Final.jar:5.3.18.Final] ...

Segue relacionamento topico/resposta e usuario/perfil

public class Topico {

    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String titulo;
    private String mensagem;
    private LocalDateTime dataCriacao = LocalDateTime.now();
    @Enumerated(EnumType.STRING)
    private StatusTopico status = StatusTopico.NAO_RESPONDIDO;
    @ManyToOne
    private Usuario autor;
    @ManyToOne
    private Curso curso;
    @OneToMany(mappedBy = "topico")
    @OnDelete(action = OnDeleteAction.CASCADE)
    private List<Resposta> respostas = new ArrayList<>();
public class Usuario implements UserDetails {

    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String nome;
    private String email;
    private String senha;
    @ManyToMany
    private List<Perfil> perfis = new ArrayList<>();
3 respostas

Alguem poderia me ajudar?

solução

Oi Victor,

Na verdade é uma dúvida em relação à JPA e não ao Spring Boot.

O LazyInitializationException vai ocorrer se você tentar acessar a lista quando o EntityManager já estiver fechado. Se ainda estiver aberto, o Hibernate consegue disparar um select para carregar a lista.

No seu caso então deve ser que o momento que você acessou a lista de respostas do tópico o EntityManager ainda estava aberto.

Bons estudos!

Obrigado Rodrigo, você está correto, está duvida deveria ser dita no curso de jpa.