680 votes

Ce qui ' s la différence JPA / Hibernate ?

Je comprends que JPA 2 est une spécification et mise en veille prolongée est un outil d'ORM. Aussi, je comprends que Hibernate a plus de fonctionnalités que JPA 2. Mais à partir d'un point de vue pratique, quelle est vraiment la différence?

J'ai de l'expérience à l'aide de iBatis et maintenant je suis en train d'apprendre, soit en veille prolongée ou JPA2. J'ai ramassé Pro JPA2 livre et il conserve la référence à "JPA fournisseur". Par exemple:

Si vous croyez qu'une fonction doit être normalisée, vous devriez en parler et en faire la demande auprès de votre fournisseur JPA

Cela me confond donc j'ai quelques questions:

  • À l'aide de JPA2 seul, puis-je récupérer des données à partir de DB simplement en annotant mon POJO de l'
  • Est JPA2 censé être utilisé avec un "JPA" Fournisseur de e.g TopLink ou mise en veille prolongée? Si oui, quel est l'avantage d'utiliser JPA2 + Hibernate par rapport à Hibernate seul?
  • Pouvez-vous recommander une bonne pratique JPA2 livre. "Pro JPA2" semble de plus en plus comme une bible et de référence sur le JPA2 (Il n'entre pas dans les Requêtes jusqu'à la deuxième moitié du livre). Est-il un livre qui prend une approche problème-solution à JPA2?

776voto

Kevin Bowersox Points 48223

Comme vous l'état JPA est juste un cahier des charges, il n'y a pas de mise en œuvre. Vous pouvez annoter vos classes autant que vous le souhaitez avec des annotations JPA, cependant, sans une mise en œuvre ne se passera rien. Pensez à JPA que les lignes directrices qui doivent être suivies ou d'une interface, alors que Hibernate JPA mise en œuvre est le code qui répond à l'API tel que défini par la spécification JPA et fournit le sous le capot de la fonctionnalité.

Lorsque vous utilisez avec Hibernate JPA vous êtes réellement en utilisant Hibernate JPA mise en œuvre. L'avantage de ceci est que vous pouvez échanger l'implémentation Hibernate de la JPA pour une autre implémentation de la spécification JPA. Lorsque vous utilisez directement Hibernate vous êtes de blocage dans la mise en œuvre parce que les autres Formulaires peuvent utiliser différentes méthodes/configurations et annotations, par conséquent, vous ne peut tout simplement pas passer à un autre ORM.

Pour une explication plus détaillée de cette réponse lire mon entrée de blog.

631voto

user1354278 Points 1109

JPA est la danse, mise en veille prolongée est la danseuse.

158voto

Ken Block Points 383

Certaines choses sont trop difficiles à comprendre sans une perspective historique de la langue et de la compréhension du PLAN.

Il y a souvent des tiers qu'à développer des packages qui remplissent une fonction ou de combler une lacune qui ne font pas partie de l'officiel du JDK. Pour diverses raisons, cette fonction peut devenir une partie de la java JDK par le JCP (Java Community Process)

Dans ce cas, mettre en veille prolongée (en 2003) ont fourni une sorte de résumé de SQL et de permettre aux développeurs de penser davantage en termes de persistance des objets (ORM). Vous notifiée hibernate sur vos objets de l'Entité et il générée automatiquement la stratégie pour les conserver. Hibernate a fourni une mise en œuvre pour ce faire et de l'API de lecteur de la mise en œuvre soit par le biais de configuration XML ou des annotations.

La question fondamentale, c'est maintenant que votre code a été étroitement couplé avec un fournisseur spécifique (Hibernate), ce que beaucoup de gens pensaient que, était un problème générique (générique persistence API). Pendant ce temps, le PCM avec beaucoup d'entrée de mise en veille prolongée et d'autres ORM vendeurs de l'outil a été le développement de la JSR 220 (Java Specification Request) qui a abouti à JPA 1.0 (2006). Et finalement JSR 317 qui est JPA 2.0 (2009). Ces sont des spécifications génériques de Java Persistence API). L'API est fournie avec le JDK comme un ensemble d'interfaces, de sorte que vos classes peuvent dépendait de la javax.persistance et ne pas s'inquiéter du fournisseur qui est en train de faire le travail de la persistance de vos objets. Ce n'est que l'API et non pas la mise en œuvre. Hibernate devient maintenant l'un des nombreux fournisseurs qui mettent en œuvre la JPA 2.0. Vous pouvez de code vers la JPA et choisir ce que conforme ORM vendeur convient à vos besoins.

Il y a des cas où Hibernate peut vous proposer des fonctionnalités qui ne sont pas codifiées dans la JPA. Dans ce cas, vous pourriez faire un choix pour insérer un spécifique d'Hibernate annotations directement dans votre classe depuis JPA ne pas fournir l'interface pour faire cette chose.

L'espoir peut vous aider.

Source: http://www.reddit.com/r/java/comments/16ovek/understanding_when_to_use_jpa_vs_hibernate/

57voto

ManuPK Points 5236

À partir du Wiki.

La Motivation pour la création de l'API Java Persistence

Plusieurs entreprises développeurs Java léger objets persistants open-source des cadres ou des Objets d'Accès aux Données au lieu de les beans entité: entité haricots et les haricots d'entreprise a une réputation d'être trop lourd et compliqué, et on ne peut les utiliser dans les serveurs d'applications Java EE. Beaucoup de fonctions de la tierce partie, la persistance des cadres ont été incorporés dans la Java Persistence API), et en 2006, des projets comme la mise en veille prolongée (version 3.2) et de la Version Open-Source, TopLink Essentials sont devenus les implémentations de l'API Java Persistence.

Comme dit dans le JCP la page de l'Éclipse lien est l'Implémentation de Référence de JPA. Un coup d'oeil à cette réponse , pour peu plus sur cette.

JPA lui-même a des fonctionnalités qui feront de place pour un standard de l'ORM. Depuis JPA est une partie de Java EE spec, vous pouvez utiliser JPA seul dans un projet et il devrait fonctionner avec n'importe quel Java EE des Serveurs compatibles. Oui, ces serveurs ont les implémentations de la JPA spec.

Hibernate est le plus populaire de l'ORM cadre, une fois la JPA ai découvert la veille prolongée est conforme à la JPA cahier des charges. En dehors de l'ensemble de base de la spécification qu'elle doit suivre hibernate fournit tas d'autres choses.

20voto

Hibernate est un fournisseur JPA.

La page JPA Vs Hibernate par Krishna Srinivasan dit:

JPA est une spécification pour l'accès, la persistance et la gestion de données entre des objets Java et la base de données relationnelle. Comme la définition l'indique son API, c'est seulement la spécification. Il n'y a pas de mise en œuvre de l'API. JPA précise l'ensemble des règles et des lignes directrices pour le développement d'interfaces qui suit la norme. Droit au but : JPA est juste des lignes directrices pour mettre en œuvre le Mapping Objet Relationnel (ORM) et il n'y a pas de code sous-jacent pour la mise en œuvre. Où que, Hibernate est la mise en œuvre effective de l'accord conjoint de projet de lignes directrices. Quand hibernate implémente la spécification JPA, ce sera certifié par l'APC de groupe à la suite de toutes les normes mentionnées dans le cahier des charges. Par exemple, JPA, les lignes directrices pourraient fournir des informations obligatoires et optionnelles à être mis en œuvre dans le cadre de l'implémentation JPA.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X