JPA sem DAO

[quote=phstc]quote=sergiotaborda

Então, se quiser utilizar EntityManager não utilize DAO. Se quiser usar DAO, não utilize EntityManager.

Se o EntityManager deve ser injetado nas classes… depende. Para pesquisas não. Devem passar pelo Repositorio apropriado. Para atualizações pode até colocar, mas pode igualmente utilizar o Repositorio para isso caso queira.
Aqui não é muito critico já que em tese vc está invocando o EntityManager de dentro de um serviço ou façade , logo, caso necessário pode ser alterado sem afetar o resto da aplicação.[/quote]

Sergio,

Não criando classes DAO, onde ficaria querys especificas? No próprio Facade ou Services?
[/quote]

Ficam nos Repositorios!!!

No service vc precisa, por exemplo, de todos os clientes que já fizeram compras na loja X. Vc escreve um método no repositorio de Cliente assim

[code]
class RepCliente{

public List encontraPorComprasEmLoja (Loja loja){

     // utilize o entity manager aqui para fazer a query 

}

}[/code]

e no seu serviço

[code]
class ServicoABC{

public void fazumservicolegal(){

    Loja loja = ... alguma loja

    List<Cliente> clientes = repCliente.encontraPorComprasEmLoja (loja);

}

}[/code]

[quote=djemacao][quote=sergiotaborda]
Todo o ponto destas conversas é só um : A aplicação NUNCA deve conhecer o sistema de persistencia do seu estado. Quando isso não é isolado o suficiente e ela conhece, o dano está feito. Então o que ha a decidir é o nivel de isolamento da persistencia ( alterações+pesquisa) e ir conforme a decisão.

Desacoplamento Total = Entidades não Anotadas + Repositorio + QueryObject + interface DAO agnostica + Implementação do DAO para a API escolhida.

Acoplamento Total = Entidades anotadas + DAO especifico de negocio e da API escolhida.

Fazer bem não demora mais, apenas tem mais niveis e é preciso mais cuidado com as interfaces dos métodos e a implmentação. Fazer rápido fica pronto antes mas sofre na hora de manter e evoluir.[/quote]

Não quero ser chato, mas vc está sendo xiita. Esquece essa meu. Isso contamina os mais novos
me diz, como vc torna isso prático? Como isso não vai tomar mais o tempo de desenvolvimento? No que ganho a longo prazo?
[/quote]

Sepração de Responsabilidade, Inversão de Controle e encapsulamento. Isso se traduz em :
TDD fácil, DDD simples, DAO reaproveitável entre projetos. Vc pode começar e completar o sistema sem uma única chamada a banco , vc pode dividir o trabalho mais facilmente, em uma palavra vc pode usufruir de OO em sua plena capacidade. Se seguir OO é ser xiita, que seja.

Não.

[quote]
Nada começa completo mas, porém, evolui. Aliás, em Java, tudo é mais lento mesmo. Pior ainda qdo querem fazer a coisa mais “desacoplada” que existe.
Eu uso o Spring, JPA, Hibernate com DAO genérico e pronto. Fica fácil de manutenir e mais simples de entender.[/quote]

Se funciona para vc otimo. Não funciona para mim.