Boa noite, pessoal.
Sei que esse pode ser um assunto “batido” para muitos aqui. De qualquer forma, eu gostaria de saber como costumam abstrair os seus DAOs.
Por exemplo, no meu caso, eu tenho métodos como este dentro de um DAO genérico:
public T findEntity(String namedQuery) {
return (T) manager.createNamedQuery(namedQuery).getSingleResult();
}
O que você pretende ganhar com essa abstraçao?
Ultimamente tenho trabalhado em sistemas menores entao nao sinto essa necessidade de ter Daos genéricos.
Por que você precisa disso? 1 método que chama 1 outro método recebendo o mesmo parâmetro. Isso é burocrático. E como você está usando JPA/Hibernate, ele já faz o papel de Dao.
Eu tenho esse DAO genérico para abstrair as operações de CRUD, basicamente.
Geralmente, ainda tenho DAOs específicos que estendem o genérico.
O que me incomoda é que muitas vezes os DAO’s específicos não fazem “NADA” além de passar o tipo T para o genérico, literalmente.
Como costumam fazer? Como fazer de uma forma diferente e ainda conseguir fazer com que a Service trabalhe de forma correta?
Abstrair a abstração de CRUD do JPA? Ele já abstrai, entao use ele diretamente.
@javaflex obrigada pelas respostas.
Como fica a questão da injeção de dependência neste caso?
Por exemplo, em que momento o meu EntityManager seria criado? Digo, se eu não tiver uma classe EJB que faz esse papel.
Depende de como está feito seu projeto. Você tinha falado em “Service”, então pode criar lá o entitymanager a partir de uma factory.
Nunca trabalhei com EJB. Vê se o exemplo abaixo pode te dar uma base pra usar o entitymanager em seu “Service”: http://stackoverflow.com/questions/4708035/persistencecontext-entitymanager-injection-nullpointerexception?answertab=active#tab-top