1
resposta

Quando uso Like para Named Queries não consigo fazer uma segunda consulta

Olá pessoal,

Substitui minha Named Query para testar o uso do Like, funcionou para a primeira consulta, mas quando tento consultar novamente o seguinte erro aparece.

Indique o nome do funcionário: 
Fulano
%Fulano%
Funcionario [id=2, nome=Fulano de Tal, cpf=154.265.225-58, salario=4500.00, dataContatacao=2022-05-04, cargo=Gerente de Projeto, unidades={[3, Sede de PD NE - Rua ABC n500 Bloco B][2, Sede Diretoria NE - Rua XPTO n 1500 Bloco A]}
Funcionario [id=3, nome=Fulano de Tal Jr, cpf=154.148.895-88, salario=5500.00, dataContatacao=2022-05-09, cargo=Desenvolvedor, unidades={[1, Sede Provisoria NE - Rua ABC n500 Bloco A][2, Sede Diretoria NE - Rua XPTO n 1500 Bloco A]}
Qual a ação que você quer executar em funcionario:
0 - Sair
1 - Busca funcionario nome
2 - Busca funcionario cpf
1
Indique o nome do funcionário: 
Luciano
%Luciano%
2022-05-09 02:00:04.049  INFO 13688 --- [           main] ConditionEvaluationReportLoggingListener : 

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2022-05-09 02:00:04.067 ERROR 13688 --- [           main] o.s.boot.SpringApplication               : Application run failed
java.lang.IllegalStateException: Failed to execute CommandLineRunner

Caused by: org.springframework.dao.InvalidDataAccessApiUsageException: Parameter value [\] did not match expected type [java.lang.String (n/a)]; nested exception is java.lang.IllegalArgumentException: Parameter value [\] did not match expected type [java.lang.String (n/a)]


Caused by: java.lang.IllegalArgumentException: Parameter value [\] did not match expected type [java.lang.String (n/a)]

Tive que diminuir o erro acima por conta da quantidade de palavras.

Percebe-se no começo que no começo faço a uma pesquisa inserindo Fulano, imprimindo antes o que eu coloquei no método para então ele retornar, até ai funciona, quando tento novamente ele dá o erro.

Meu código no repository

import java.util.List;

import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;

import com.luciano.spring.data.model.Funcionario;

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

    List<Funcionario> findByNomeLike(String nome);

    List<Funcionario> findByCpf(String cpf);
}

Meu código no RelatorioService onde uso o método findByNomeLike(String nome)

    private void buscaFuncionarioNome(Scanner scanner) {
        System.out.println("Indique o nome do funcionário: ");
        scanner.nextLine();
        String nome = scanner.nextLine();
        nome = "%"+nome+"%";

        System.out.println(nome);
        List<Funcionario> list = repository.findByNomeLike(nome);
        list.forEach(System.out::println);
    }
1 resposta

Olá Luciano,

O erro que está ocorrendo é devido ao fato de que o valor do parâmetro nome está sendo passado como \ ao invés de uma string. Isso pode estar acontecendo devido à forma como você está lendo o valor do nome no método buscaFuncionarioNome no RelatorioService.

Tente verificar se o valor do nome está sendo lido corretamente e se não há nenhum caractere especial sendo adicionado ao final ou início da string.

Além disso, sugiro que você verifique se o valor do parâmetro nome está sendo passado corretamente para o método findByNomeLike no FuncionarioRepository.

Espero ter ajudado e bons estudos!