Sobre DAOs genéricos

7 respostas Resolvido
jpajava
K

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();
}

7 Respostas

A

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.

javaflex

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.

K

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?

javaflex

Abstrair a abstração de CRUD do JPA? Ele já abstrai, entao use ele diretamente.

K

@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.

javaflex
Solucao aceita

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

K

Obrigada!

Criado 19 de maio de 2017
Ultima resposta 20 de mai. de 2017
Respostas 7
Participantes 3