Olá Lorenzo, tudo bem?
Na verdade, o método findAll() ainda aceita uma Specification como parâmetro para consultas dinâmicas no Spring Data JPA. A classe Specification é parte do módulo Spring Data JPA, e é utilizada para definir critérios de busca dinâmicos.
https://docs.spring.io/spring-data/jpa/docs/current/api/org/springframework/data/jpa/repository/JpaRepository.html
Você pode criar uma especificação para buscar os registros que atendem a determinados critérios e, em seguida, passá-la como parâmetro para o método findAll(). Para isso, você precisa usar a classe Specification (onde T é o tipo da entidade que você está consultando) e a interface JpaSpecificationExecutor, que estende a interface CrudRepository<T, ID> ou PagingAndSortingRepository<T, ID> para habilitar as consultas com especificação. Exemplo:
import org.springframework.data.jpa.domain.Specification;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
public interface PessoaRepository extends JpaRepository<Pessoa, Long>, JpaSpecificationExecutor<Pessoa> {
}
// usando a especificação
public List<Pessoa> findAllByNomeAndIdade(String nome, Integer idade) {
Specification<Pessoa> spec = Specification.where(null);
if (nome != null) {
spec = spec.and((root, query, builder) -> builder.like(root.get("nome"), "%" + nome + "%"));
}
if (idade != null) {
spec = spec.and((root, query, builder) -> builder.equal(root.get("idade"), idade));
}
return pessoaRepository.findAll(spec);
}
Observe que o método findAllByNomeAndIdade() usa a Specification para construir uma consulta dinâmica, que pode filtrar registros com base no nome e/ou idade. A Specification é criada com a ajuda do objeto builder, que é fornecido pelo JPA Criteria API. Em seguida, a Specification é passada como parâmetro para o método findAll() do repositório.
Certifique-se de importar as classes necessárias e estender a interface JpaSpecificationExecutor em seu repositório para habilitar a consulta dinâmica com especificação.