1
resposta

Erro na execução da Native Query

Na execução da Native Query ocorreu o seguinte erro: could not initialize proxy [br.com.alura.spring.data.orm.Cargo#3] - no Session

O código da FuncionarioRepository, está idêntico ao do professor. É este aqui.

package br.com.alura.spring.data.repository;

import java.time.LocalDate;
import java.util.List;

import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.CrudRepository;
import org.springframework.data.repository.PagingAndSortingRepository;
import org.springframework.stereotype.Repository;

import br.com.alura.spring.data.orm.Funcionario;
import br.com.alura.spring.data.orm.FuncionarioProjecao;

@Repository
public interface FuncionarioRepository extends CrudRepository<Funcionario, Integer>,
                PagingAndSortingRepository<Funcionario, Integer>,
                JpaSpecificationExecutor<Funcionario>{

    List<Funcionario> findByNome(String nome);

    @Query("SELECT f FROM Funcionario f WHERE f.nome = :nome "
            + "AND f.salario >= :salario AND f.dataContratacao = :data")
    List<Funcionario> findNomeSalarioMaiorDataContratacao(String nome, Double salario, LocalDate data);

    @Query(value = "SELECT * FROM funcionarios f WHERE f.data_contratacao >= :data",
            nativeQuery = true)
    List<Funcionario> findDataContratacaoMaior(LocalDate data);

    @Query(value = "SELECT f.id, f.nome, f.salario FROM funcionarios f", nativeQuery = true)
    List<FuncionarioProjecao> findFuncionarioSalario();
}

Todas as queries acima funcionam, exceto a terceira, a native query, que busca funcionários pela data de contratação. O que pode estar errado? Estou usando o Java 17. O restante (Maria DB e DBeaver) é o que foi recomendado pelo professor

1 resposta

Olá

tenta incluir um JOIN na consulta:

@Query(value = "SELECT f FROM Funcionario f LEFT JOIN FETCH f.cargo c WHERE f.dataContratacao >= :data")
List<Funcionario> findDataContratacaoMaior(LocalDate data);

Dessa forma usando JOIN FETCH irá carregar a entidade Cargo ao mesmo tempo que carrega o Funcionario, deve resolver