Caused by: org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: br.com.alura.spring.data.orm.Cargo.funcionario, could not initialize proxy - no Session
Estou com esse problema, seguindo a aula de DerivedQuery não consegui encontrar o problema, o erro acontece quando acesso a aba de relatórios e tento buscar por um nome ele da esse erro, comparei meu código com o da aula mas não achei o problema... Segue abaixo os códigos: Classe de Cargo
@Entity
@Table(name="cargos")
@Getter
@Setter
@ToString
public class Cargo {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private String descricao;
@OneToMany(mappedBy = "cargo")
private List<Funcionario> funcionario;
}
Classe de Funcionário
package br.com.alura.spring.data.orm;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;
import javax.persistence.*;
import java.time.LocalDate;
import java.util.List;
@Entity
@Table(name="funcionarios")
@Getter
@Setter
@ToString
public class Funcionario {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private String nome;
private String cpf;
private Double salario;
private LocalDate dataContratacao;
@ManyToOne
@JoinColumn(name = "cargo_id", nullable = false)
private Cargo cargo;
@Fetch(FetchMode.SELECT)
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(name = "funcionarios_unidades", joinColumns = {
@JoinColumn(name = "fk_funcionario")},
inverseJoinColumns = { @JoinColumn(name = "fk_unidade")})
private List<UnidadeTrabalho> unidadeTrabalhos;
}
Referente a service RelatoriosService criada:
package br.com.alura.spring.data.service;
import br.com.alura.spring.data.orm.Funcionario;
import br.com.alura.spring.data.repository.FuncionarioRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Scanner;
@Service
public class RelatoriosService {
private Boolean system = true;
private final FuncionarioRepository funcionarioRepository;
public RelatoriosService(FuncionarioRepository funcionarioRepository){
this.funcionarioRepository = funcionarioRepository;
}
public void inicial(Scanner scanner){
while(system){
System.out.println("Qual ação de cargo deseja executar");
System.out.println("0 - Sair");
System.out.println("1- Busca funcionário pelo nome");
int action = scanner.nextInt();
switch(action){
case 1:
buscaFuncionario(scanner);
break;
default:
system = false;
break;
}
}
}
private void buscaFuncionario(Scanner scanner){
System.out.println("Qual nome deseja pesquisar: ");
String nome = scanner.next();
List<Funcionario> list = funcionarioRepository.findByNome(nome);
list.forEach(System.out::println);
}
}