1
resposta

Ordinal parameter not bound : null

Pra mim o hibernate não está aceitando parâmetros null na query. Será alguma coisa que não estou vendo ou alguma diferença entre as versões das dependências?

@Service
public class RelatorioFuncionarioDinamico {
    private final FuncionarioRepository funcionarioRepository;
    private final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy");

    public RelatorioFuncionarioDinamico(FuncionarioRepository funcionarioRepository) {
        this.funcionarioRepository = funcionarioRepository;
    }

    public void inicial(Scanner scanner) {
        System.out.println("Digite um nome");
        String nome = scanner.next();

        if (nome.equalsIgnoreCase("NULL")) {
            nome = null;
        }

        System.out.println("Digite um CPF");
        String cpf = scanner.next();

        if (cpf.equalsIgnoreCase("NULL")) {
            cpf = null;
        }

        System.out.println("Digite um salário");
        Double salario = scanner.nextDouble();

        if (salario == 0) {
            salario = null;
        }

        System.out.println("Digite uma data");
        String strDate = scanner.next();

        LocalDate dataContratacao;
        if (strDate.equalsIgnoreCase("NULL")) {
            dataContratacao = null;
        } else {
            dataContratacao = LocalDate.parse(strDate, formatter);
        }

        List<Funcionario> funcionarios = funcionarioRepository
                .findAll(Specification.where(SpecificationFunctionario.nome(nome))
                        .or(SpecificationFunctionario.cpf(cpf))
                        .or(SpecificationFunctionario.salario(salario))
                        .or(SpecificationFunctionario.dataContratacao(dataContratacao)));

        funcionarios.forEach(System.out::println);
    }
}
public class SpecificationFunctionario {

    public static Specification<Funcionario>nome(String nome) {
        return (root, criteriaQuery, criteriaBuilder) -> 
        criteriaBuilder.like(root.get("nome"), "%" + nome + "%");
    }

    public static Specification<Funcionario>cpf(String cpf) {
        return (root, criteriaQuery, criteriaBuilder) -> 
        criteriaBuilder.equal(root.get("cpf"), cpf);
    }

    public static Specification<Funcionario>salario(Double salario) {
        return (root, criteriaQuery, criteriaBuilder) -> 
        criteriaBuilder.greaterThan(root.get("salario"), salario);
    }

    public static Specification<Funcionario>dataContratacao(LocalDate dataContratacao) {
        return (root, criteriaQuery, criteriaBuilder) -> 
        criteriaBuilder.greaterThan(root.get("dataContratacao"), dataContratacao);
    }

}
1 resposta

Olá Anderson, tudo bem?

Pelo que entendi, você está tendo problemas com a aceitação de parâmetros nulos na sua query do Hibernate. Verifique se você está passando corretamente esses parâmetros e se as dependências estão atualizadas. Se você conseguir seria bom colocar um breakpoint na chamada do método e debugar para verificar de onde está vindo o valor null.

Uma sugestão é verificar se o problema está na linha onde você está passando os parâmetros para a query. Tente utilizar o método "setParameter" para passar os valores null.