Estava indo bem até que …
Outch! Se eu tivesse um centavo por cada vez que alguem confundo repositorio com DAO, estaria rico.
Veja bem o problema. O repositorio não é um DAO, nem o DAO é um repositorio. Logo, herança ou implementação de um pelo outro é asneira.
Este erro é muito comum pela mesma razão que é muito comuma alguem fazer este erro aqui:
public class Pedido extends HashMap<Integer, ItemPedido>
ou
public class Produtos extends ArrayList<Produto>
As pessoas ainda não sabem o que é herança. A regra é simples: perfira composição a herança. Apenas e quando A é B é que a herança pode ser usada. (Herança aqui inclui o implements e o extends)
Ora da mesma forma que um Pedido não é um HashMap e sim Pedido contém um Map, também Repositorio não é um DAO, Repositorio contém um DAO.
Inverter as coisas é ainda pior. Fazer DAO extends Repositorio é do mesmo calibre que fazer HashMap extends Pedido. Pedido é do dominio, Map é de infra. infra não pode extender o dominio. O dominio não pode extender a infra. O que pode acontecer é que o dominio use a infra. Daqui a composição ao invés da herança.
Pior ainda é escrever um DAO usando JPA por baixo… JPA é orientado ao dominio. DAOs não são. Você não precisa usar a camada de DAO se usa JPA.
Por amor de Deus, pessoal, estudem a arquitetura JPA e o padrão Domain Store. É triste vos ver cometendo o mesmo erro vezes sem conta…
A partir do ponto que vc misturou tudo não só você não sabe no “mato sem cachorro” em que se está metendo como você ainda sofre do sindrome de DAO. Pelo menos vc ainda vislumbra uma diferença entre DAO e Repositório. Isso já é um bom sinal para um cura possivel.