Boa tarde galera, tudo bem?
Gostaria de saber se vocês podem me esclarecer uma dúvida cruel que tenho já faz um bom tempo.
É o seguinte, eu sei que JPA seria uma especificação de persistência e Hibernate seria a implementação do JPA.
Então isso quer dizer que, se eu quiser utilizar SOMENTE JPA para fazer a persistência dos meus dados em uma aplicação, não teria como? Eu sempre tenho que ter um framework que implementa JPA para que isso seja possível?
Eu tenho essa dúvida porque em muitos lugares eu vejo artigos, matérias, etc. com títulos como: “Construa uma aplicação utilizando JSF + JPA 2.0”.
Se alguém puder esclarecer essa dúvida para mim, eu ficaria grato.
Guri.
Tbm tenho esta duvida… a Biblioteca do JPA , somente com ela é possível persistir dados ? ,
Caso sim , oque muda com os Frameworks EclipseLink , Hibernate e afins?
Sim. A especificação fala como você deve construir certa coisa, para que funcione efetivamente é necessário ter algum implementador (conceito parecido a interface e classe implementadora concreta).
Acredito que estes tutorais que você mencionou refira-se a você usar JPA para abstrair a tecnologia implementadora de persistência, permitindo que você use o hibernate ou qualquer outro framework que seja baseado na JPA.
Basicamente a diferença é o seguinte:
O Hibernate e alguns outros ORMs vieram ANTES da JPA, então eles já tem uma API própria, quando a JPA surgiu eles se adaptaram a essa nova API.
Você pode usar o Hibernate de duas formas, uma é usando a especificação JPA e a outra é usando a dele próprio.
Se você usar a API do próprio Hibernate, você fica preso a ele. Se você usar a JPA, teoricamente , você pode trocar o framework, como por exemplo, trocar para o EclipseLink. Mas teoricamente né? Isso não quer dizer que vá funcionar e acho muito difícil também trocarem a implementação.
A única vantagem que eu vejo é: Se o seu projeto for Hibernate usando JPA, alguém que conheça o Eclipse Link vai saber programar sem problemas, se usar a API do próprio Hibernate, ele terá que aprender a API.
sim, nestes casos quando dizem “faça x com jpa”, estão se referindo a fazer, a algo mais concreto… a implementação é algo concreto, a especificação é abstrata, é a idéia, é como deve uma determinada api deve funcionar, o que ela deve possuir… concretamente, a execução, pode ser com qualquer API que implemente a especificação, sim é como classes e interfaces…
Eu gosto de pensar sempre do seguinte modo
JPA - Define o que vai ter, método e tals.
Hibernate/TopLink e etcs - Quem pões a mão na massa.
Tanto que quando construo uma app eu sempre referencio à api JPA, mas no persistence estou apontando para o hibernate.
Galera,
Muito obrigado pela dica de vocês! Realmente, me agregaram muitos conhecimentos que eu não havia absorvido ainda!
Agora sim, entendi a real diferença entre JPA e um framework de persistência e as propagandas de “faça x com JPA”.
Guri.