2
respostas

Qual a melhor forma de trabalhar com Repository e DAO juntos utilizando o Spring Data?

Gostaria de saber qual seria a melhor maneira de implementar uma classe Repository (JpaRepository) junto com uma classe DAO para consultas mais complexas e mais especificas com Criteria.

2 respostas

Bom, eu encontrei uma forma bastante interessante para se resolver esse problema, caso alguém não concorde, é só se manifestar para discutirmos. Vamos lá:

  • Criei uma interface personalizada (TopicoRepositoryCustomer) para a classe de domínio (Topico), nela será definido todos os métodos complexos e de caráter específico.
public interface TopicoRepositoryCustomer {    
    void executaBackup();
}
  • Depois criei uma classe para implementar tais métodos (TopicoRepositoryCustomerImpl), é nela que vamos injetar o EntityManager através da anotação @PersistenceContext e realizar as consultas utilizando, no meu caso, Criteria.
public class TopicoRepositoryCustomerImpl implements TopicoRepositoryCustomer {

    @PersistenceContext
    private EntityManager em;

    @Override
    public void executaBackup() {
        //implementação com Criteria abstraido...
        System.out.println("backup executado");
    }
}
  • Por ultimo na classe TopicoRepository, é só herdar a interface TopicoRepositoryCustomer.
public interface TopicoRepository extends JpaRepository<Topico, Long>, TopicoRepositoryCustomer {
    List<Topico> findByAutorEmail(String email);
}
  • Dessa forma você terá todo os benefícios da classe JpaRepository e ainda definir consultas mais complexas.

OBS 1: As classes ''..Customers" e "...Impl", devem manter esse padrão de nomenclatura, caso contrário receberá um “No Property Found for Type” Exception.

OBS 2: Anote os serviços que utilizam RepositoryCustomer com @Transactional, para que o Spring gerencie abertura e fechamento do EntityManager.

Olá Augusto, tudo bem? Peço desculpas pela demora no retorno! Mas que solução interessante essa sua, muito bacana mesmo, assim vamos ter todos os recursos que precisamos, os recursos da JpaRepository que são excelentes e também recursos específicos e complexos que nos mesmos fazemos diretamente, muito legal mesmo! Continue assim e bons estudos!