Fala pessoal!
Desculpem a minha ignorância, mas tenho uma dúvida que pode inclusive ser a mesma de muita gente.
Ainda preciso usar o Hibernate tendo o JPA? Sei que preciso criar uma Persistence Unit do Hibernate para trabalhar com o JPA, mas onde entra o Hibernate nessa história se as classes de entidade não possuem referência alguma e o EntityManager, posso estar enganado, é como se fosse o Session do Hibernate, certo?
Qual a utilidade das NamedQueries nas classes de entidade? Por que colocar as queries na classe manualmente?
Uso o NetBeans e ele dá opção de você criar as classes de entidade automaticamente e os controllers JPA também. A dúvida, é: Os JPA Controllers que ele cria seria um substituto do DAO? Percebi que ele cria uma factory em todos os JPA Controllers. Não teria que ser Singleton?
São muitas dúvidas eu sei, mas se alguém puder me ajudar vou agradecer muito!
Valeu!
JPA = Java Persistence API
JPA é um padrão J2EE para persistência de dados;
Nasceu da especificação EJB3;
Adotou o que tem de melhor de: JDO, Hibernate e Oracle Toplink;
É uma camada de abstração, portanto necessita de um provedor de persistência. Por exemplo, Hibernate e Oracle Toplink;
Não exige a edição de arquivos XML complexos para mapeamento;
O mapeamento é realizado por meio de anotações;
Por que utilizar JPA?
Independência de provedor de persistência;
Facilidade de mapeamento objeto-relacional por meio de anotações;
Possui sintaxe de manipulação de persistência de objetos semelhante ao Hibernate e outros;
Agilidade: utiliza configuração por exceção, ou seja, caso não seja especificado, considera por padrão que os nomes das propriedades da classe serão iguais aos nomes dos campos no banco de dados, combinando agilidade, sem perder flexibilidade
Para utilizar JPA, é necessário baixar algumas implementações:
Hibernate Core: é o núcleo da implementação do Hibernate;
Hibernate Annotations: permite utilizar anotações;
Hibernate Entity Manager: permite utilizar o gerenciador de entidade do Hibernate;
@NamedQueries Organiza um array de anotações @NamedQuery.
@NamedQuery Traduz uma consulta JPA para uma consulta SQL. Essa consulta
pode ser refenciada em qualquer lugar pelo nome estabelecido.
Cara, valeu por tentar me ajudar, mas veja só.
Você disse que o JPA é uma camada de abstração, portanto necessita de um provedor de persistência; no caso o Hibernate, mas logo depois você diz que deve-se usar o JPA por ele ser independente de um provedor de persistência.
Existem alguns provedores de persistencias, mas vou retratar de dois.
São eles, “Hibernate” e “Oracle TopLink”.
Quando eu disse sobre poder usar o JPA INDEPENDENTE DO PROVEDOR DE PERSISTENCIA, significa que vc pode optar em usar ou o “HIBERNATE” OU “ORACLE TOPLINK”.
Você tem que usar um provedor de persistencia, mas a escolha fica a seu criterio.
O provedor de persistencia nada mais e do que é o mecanismo responsável por persistir dados das Entity
para o banco de dados, e inversamente, obter dados do banco de dados para instâncias de entity.
Diferentes implementações de provedores de serviço de mapeamento O/R (Hibernate, Oracle TopLink) podem ser utilizados. Sua alteração não afetará o código-fonte num software, pois os detalhes da implementação é transparente às Entity
Pelo que entendi sobre JPA com Hibernate é que, o JPA vai gerenciar as classes modelos da sua aplicação, vai definir o relacionamento entre elas, todos por meio de anotações.
E no persistence.xml, vc define o tipo de provedor para persistência.
(Corrijam se não estiver correto): O JPA por si só não faz a persistência, apenas gerencia a forma como os objetos serão persistidos no BD.
Aí um provedor qualquer, como Hibernate, toplink, PROVÊ a persistência dos objetos gerenciados pelo JPA.
Por exemplo, com Hibernate apenas, vc consegue fazer ele gerenciar as classes, definir a forma como são persistidos (por meio de anotações ou configurações em XML) e fazer a persistência no BD.
Mas a vantagem ao utilizar o JPA para gerenciar, e não o próprio provedor, é que futuramente vc pode mudar seu provedor, sem alterar os modelos definidos na sua aplicação.
Se amanhã inventarem um outro framework de persistência, que possa ser mais rápido, ou mais otimizado, ou mais qq coisa que o Hibernate, vc apenas muda o PersistenceProvider no seu XML.