Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

CrudRepository para PagingAndSortingRepository

Quando altero a interface FuncionarioRepository para extender de CrudRepository para PagingAndSortingRepository os métodos save(), findById(id); getReferenceById(id); param de funcionar.

Alterando para JpaRepository os métodos funcionam e a paginação e ordenação também funcionam. Está certo isso?

Interface FuncionarioRepository

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

    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> buscarNomeContratacaoEsalarioMaior(String nome, Double salario, LocalDate data);

    //buscar funcionario pela descricao do cargo
    List<Funcionario> findByCargoDescricao(String descricao);

    List<Funcionario> findByUnidadeTrabalhos_Descricao(String descricao);

    /**
     *  é equivalente ao método de cima, mudei o nome para diferenciar um do outro
     **/
    @Query("SELECT f FROM Funcionario f JOIN f.unidadeTrabalhos u WHERE u.descricao = :descricao")
    List<Funcionario> findByUnidadeTrabalhos_ (String descricao);


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

Classe CrudFuncionarioService

@Service
public class CrudFuncionarioService {

private final FuncionarioRepository funcionarioRepository;
    private final CargoRepository cargoRepository;
    private final UnidadeTrabalhoRepository unidadeTrabalhoRepository;

    private Boolean system= true;
    private final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy");

    public CrudFuncionarioService(FuncionarioRepository funcionarioRepository, CargoRepository cargoRepository, UnidadeTrabalhoRepository unidadeTrabalhoRepository) {
        this.funcionarioRepository = funcionarioRepository;
        this.cargoRepository = cargoRepository;
        this.unidadeTrabalhoRepository = unidadeTrabalhoRepository;
    }

    private void visualizar(Scanner scanner) {
        System.out.println("Informe a pagina");
        int page = scanner.nextInt();

        //sem ordenação
        //Pageable pageable = PageRequest.of(page, 10, Sort.unsorted());
        //ordenação crescente por nome
        Pageable pageable = PageRequest.of(page, 10, Sort.by(Sort.Direction.ASC, "nome"));

        Page<Funcionario> funcionarios = funcionarioRepository.findAll(pageable);

        System.out.println("Número de pag. "+funcionarios);
        System.out.println("Pag "+ funcionarios.getNumber());//pag naquele momento
        System.out.println("Total de "+ funcionarios.getTotalElements()+ " elementos");
        funcionarios.forEach(f -> System.out.println(f));
    }
    private void salvar(Scanner scanner) {
        System.out.println("Informe o nome do Funcionario");
        String nome = scanner.next();

        System.out.println("Informe o CPF do Funcionario");
        String cpf = scanner.next();

        System.out.println("Informe o Salario do Funcionario");
        Double salario = scanner.nextDouble();

        System.out.println("Informe o Data de Contratacao do Funcionario");
        String dataContratacao = scanner.next();

        System.out.println("Informe o ID do cargo do Funcionario");
        Integer cargoId = scanner.nextInt();

        List<UnidadeTrabalho> unidades = unidade(scanner);

        Funcionario func = new Funcionario();
        func.setNome(nome);
        func.setCpf(cpf);
        func.setSalario(salario);
        func.setDataContratacao(LocalDate.parse(dataContratacao, formatter));

        Optional<Cargo> cargo = cargoRepository.findById(cargoId);
        func.setCargo(cargo.get());

        func.setUnidadeTrabalhos(unidades);

        funcionarioRepository.save(func);
    }
    }

Obs. tive que encolher a classe porque ultrapassou a quantidade de caracteres.

1 resposta
solução!

Olá Pedro, tudo bem?

Quando você altera a interface FuncionarioRepository para extender de PagingAndSortingRepository, é necessário utilizar os métodos de paginação e ordenação para que os métodos save(), findById(id) e getReferenceById(id) funcionem corretamente.

Porém, ao utilizar JpaRepository, esses métodos já incluem as funcionalidades de paginação e ordenação, o que faz com que eles funcionem sem a necessidade de utilizar métodos adicionais.

Portanto, está correto utilizar JpaRepository se você deseja utilizar a funcionalidade de paginação e ordenação.

Espero ter ajudado e bons estudos!