Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

Solucionado
(ver solução)
2
respostas

Ordem

Gostaria de saber o porquê desta ordem: public interface CargoRepository extends CrudRepository<Cargo, Integer>{

se eu não posso fazer assim public interface CargoRepository extends CrudRepository<Integer, Cargo>{

e porque não usa o campo descrição na interface também?

2 respostas

A interface CrudRepository, bem como outras interfaces para repositórios, tem uma ordem dentro da implementação delas... Se você entrar na pasta do JpaRepository verá que ela trata seu primeiro generic como classe e seu segundo como a primary key. Deixe-me tentar explicar melhor:

@NoRepositoryBean
public interface JpaRepository<T, ID> extends PagingAndSortingRepository<T, ID>, QueryByExampleExecutor<T> {

essa é a assinatura da interface JpaRepository, no qual ela deixa explícito a ordem dos generics, se você olhar os métodos dessa interface, verá que o retorno dos métodos são baseados no "T".

@Override
    List<T> findAll();

    /*
     * (non-Javadoc)
     * @see org.springframework.data.repository.PagingAndSortingRepository#findAll(org.springframework.data.domain.Sort)
     */
    @Override
    List<T> findAll(Sort sort);

    /*
     * (non-Javadoc)
     * @see org.springframework.data.repository.CrudRepository#findAll(java.lang.Iterable)
     */
    @Override
    List<T> findAllById(Iterable<ID> ids);

E o parâmetro de busca na maior parte do tempo é o ID da entidade, sendo assim, se você quiser substituir o

findById(ID id) 

terá que criar seu próprio método de busca, como por exemplo:

findByDescricao(String descricao);
solução!

Obrigado!