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

Implementação de interface repository

Na aula é dito que há a possibilidade de implementar outros métodos além do CRUD. Porém só é mostrado a declaração do método.

Onde e como ficaria a implementação desse método?

Digamos que eu quisesse criar uma implementação que procura por nome e email ou que eu precise fazer um join fetch com outra tabela, a assinatura do método fica na interface, mas e a implementação?

Obrigado.

1 resposta
solução!

Oi Ricardo,

Na verdade não tem implementação mesmo. Você apenas declara a assinatura do método na interface, e o próprio Spring Data JPA que se encarrega de implementar dinamicamente esse método, baseado no nome dele.

É meio bruxaria mesmo :D

Na primeira vez que vi isso fiquei perguntando a mesma coisa: Ué só cria a interface? Mas cade a implementação? e como ele sabe qual implementação chamar???

Isso é gerado de maneira dinamica e automatizada pelo Spring.

O problema é que você precisa seguir a conveção dele ao nomear seu método. Exemplos:

List<Convidado> findByNomeLike(String nome);
List<Convidado> findByNomeAndEmail(String nome, String email);
List<Convidado> findByTelefoneNotNullOrderByNomeDesc();

Mas caso você precise de uma querie mais complexa, ou queira deixar o método com um nome mais simples e legivel, pode utilizar a anotação @Query:

@Query("SELECT c FROM Convidado c JOIN FETCH ... WHERE c.nome = :nome ORDER BY ...")
List<Convidado> buscarPeloNome(@Param("nome") String nome);

Bons estudos!