Quelle est la différence entre le JPA et L'hibernation? [fermé]

je comprends que JPA 2 est une spécification et mise en veille prolongée est un outil d'ORM. En outre, je comprends que L'hibernation a plus de caractéristiques que le JPA 2. Mais d'un point de vue pratique, Quelle est la différence?

j'ai l'expérience de l'utilisation d'iBatis et maintenant j'essaie d'apprendre soit L'hibernation ou JPA2. J'ai pris Pro JPA2 book Et il continue de se référer à "JPA provider". Par exemple:

si vous pensez qu'une caractéristique devrait être normalisés, vous devriez en parler et le demander à votre fournisseur JPA

cela me trouble donc j'ai quelques questions:

  • en utilisant JPA2 seul puis-je récupérer des données à partir de DB en annotant simplement mon POJO
  • 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 à JPA2 seul, ou par rapport à Hibernate seul ?
  • pouvez-vous recommander un bon livre pratique JPA2. "Pro JPA2" ressemble plus à une bible et une référence sur JPA2 (il n'entre pas dans les requêtes jusqu'à la dernière moitié du livre). Y a-t-il un livre qui adopte une approche problème/solution à JPA2?
682
demandé sur vdegenne 2012-03-27 04:04:39

23 réponses

comme vous dites JPA est juste une spécification, ce qui signifie qu'il n'y a pas de mise en œuvre. Vous pouvez annoter vos classes autant que vous le souhaitez avec des annotations JPA, mais sans implémentation rien ne se passera. Pensez à JPA comme les lignes directrices qui doivent être suivies ou une interface, tandis que la mise en œuvre JPA D'Hibernate est un code qui répond à L'API tel que défini par la spécification JPA et fournit la fonctionnalité under the hood.

lorsque vous utilisez Hibernate avec Vous utilisez en fait L'implémentation Hibernate JPA. L'avantage de ceci est que vous pouvez échanger la mise en œuvre de JPA de Hibernate pour une autre mise en œuvre de la spécification JPA. Lorsque vous utilisez straight Hibernate, vous vous bloquez dans l'implémentation parce que d'autres ORMs peuvent utiliser des méthodes/configurations et des annotations différentes, donc vous ne pouvez pas simplement passer à un autre ORM.

pour une description plus détaillée lire mon .

777
répondu Kevin Bowersox 2017-11-18 19:41:32

JPA est la danse, Hibernate est le danseur.

634
répondu johnm 2014-02-03 17:25:40

certaines choses sont trop difficiles à comprendre sans une perspective historique du langage et de la compréhension du PCE.

il y a souvent des tiers qui développent des paquets qui remplissent une fonction ou comblent une lacune qui ne font pas partie du JDK officiel. Pour diverses raisons, cette fonction peut faire partie du JDK Java par le biais du JCP (Java Community Process)

Hibernate (en 2003) a fourni un moyen de résumé SQL et permettre aux développeurs de pensez plus en termes d'objets persistants (ORM). Vous avisez hibernate au sujet de vos objets D'entité et il génère automatiquement la stratégie pour les persister. Hibernate a fourni une implémentation pour faire cela et L'API pour piloter l'implémentation soit par le biais de la configuration XML ou des annotations.

la question fondamentale maintenant est que votre code devient étroitement couplé avec un vendeur spécifique(hibernation) pour ce que beaucoup de gens pensaient devrait être plus générique. D'où la nécessité d'une générique persistence API).

pendant ce temps, le JCP avec beaucoup d'entrées de Hibernate et d'autres fournisseurs d'outils ORM développait JSR 220 (Java Spécification Request) qui a abouti à JPA 1.0 (2006) et finalement JSR 317 qui est JPA 2.0 (2009). Il s'agit des spécifications d'une API Java Persistence Générique. L'API est fournie dans le JDK comme un ensemble d'interfaces afin que vos classes puissent dépendre du javax.la persistance et ne pas se soucier du vendeur particulier qui fait le travail de persister vos objets. Ce N'est que L'API et non l'implémentation. Hibernate devient maintenant l'un des nombreux fournisseurs qui mettent en œuvre la spécification JPA 2.0. Vous pouvez coder vers JPA et choisir le fournisseur d'ORM conforme qui convient à vos besoins.

il y a des cas où L'hibernation peut vous donner des caractéristiques qui ne sont pas codifiées dans le JPA. Dans ce cas, vous pouvez choisir d'insérer une annotation spécifique Hibernate directement dans votre classe car JPA ne fournit pas l'interface pour faire cette chose.

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

158
répondu Ken Block 2015-09-03 11:03:14

JPA est l'interface tandis que Hibernate est la mise en œuvre.

traditionnellement, il y a eu plusieurs solutions Java ORM:

chaque implémentation définissant sa propre définition de mappage ou Client API. Le groupe D'experts JPA a rassemblé le meilleur de tous ces outils et a donc créé la norme Java Persistence API.

une API de persistance standard est très pratique du point de vue du client, ce qui le rend relativement facile à commuter une implémentation avec l'Autre (bien que dans la pratique, ce n'est pas aussi simple car sur les grands projets, vous devrez de toute façon utiliser des fonctionnalités spécifiques non standard).

la norme JPA a poussé la concurrence Java ORM à un nouveau niveau et cela ne peut conduire qu'à de meilleures implémentations.

, Comme expliqué dans mon livre, Haute Performance Java Persistence , Hibernate propose des fonctionnalités qui ne sont pas encore pris en charge par JPA :

ces caractéristiques supplémentaires permettent à Hibernate de répondre à de nombreuses exigences de persistance exigées par les applications des grandes entreprises.

100
répondu Vlad Mihalcea 2018-01-04 06:23:52

De la Wiki .

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

beaucoup de développeurs Java d'entreprise utilisent des objets légers persistants fournis par des cadres open-source ou des objets D'accès aux données au lieu de haricots entité: haricots entité et haricots d'entreprise avaient une réputation d'être trop lourd et compliqué, et on ne pouvait les utiliser dans L'application Java EE serveur. Bon nombre des fonctionnalités des cadres de persistance de tiers ont été incorporées dans L'API de persistance de Java, et depuis 2006 des projets comme Hibernate (version 3.2) et la Version Open-Source TopLink Essentials sont devenus des implémentations de L'API de persistance de Java.

comme indiqué dans la page JCP le lien Eclipse est L'implémentation de référence pour JPA. Regardez cette réponse pour un peu plus à ce sujet.

JPA elle-même présente des caractéristiques qui constituent un cadre ORM standard. Comme JPA fait partie de Java EE spec, vous pouvez utiliser JPA seul dans un projet et il devrait fonctionner avec n'importe quel Java EE serveurs compatibles . Oui, ces serveurs auront les implémentations pour les spécifications JPA.

hibernation est le plus populaire ORM cadre, une fois le JPA a été introduit hibernation conforme aux spécifications JPA . En dehors de l'ensemble de base de spécification qu'il devrait suivre hibernate fournit beaucoup de choses supplémentaires.

58
répondu ManuPK 2017-05-23 12:34:50

Hibernate est un fournisseur JPA.

the page JPA Vs Hibernate by Krishna Srinivasan says:

JPA est une spécification pour accéder, persister et gérer les données entre les objets Java et la base de données relationnelle. Comme la définition dit son API, CE n'est que la spécification. Il n'y a pas d'implémentation pour L'API. JPA spécifie l'ensemble de règles et de lignes directrices pour le développement des interfaces qui suit la norme. Directement au point: JPA est juste des lignes directrices pour mettre en œuvre la cartographie relationnelle objet (ORM) et il n'y a pas de code sous-jacent pour la mise en œuvre. Où as, Hibernate est la mise en œuvre effective des lignes directrices de L'app. Lorsque hibernate mettra en œuvre la spécification JPA, celle-ci sera certifiée par le groupe JPA sur la base de toutes les normes mentionnées dans la spécification. Par exemple, les lignes directrices de L'app fourniraient des renseignements sur les caractéristiques obligatoires et facultatives qui doivent être mise en œuvre dans le cadre de la mise en œuvre de L'app.

20
répondu Yasir Shabbir Choudhary 2014-09-22 07:27:02

JPA est juste une spécification qui nécessite une mise en œuvre concrète. Le implémentation par défaut oracle provide est" Eclipselink " maintenant. (Toplink est donné par Oracle à Eclipse foundation pour fusionner avec eclipselink)

(référence: http://www.oracle.com/technetwork/middleware/toplink/index-085257.html http://www.eclipse.org/org/press-release/20080317_Eclipselink.php )

en utilisant Eclipselink, on peut être sûr que le code est portable à n'importe quelle implémentation si le besoin se présente. Hibernate est également une mise en œuvre complète de JPA + plus ( sorte de JPA Plus). Hibernate est super ensemble de JPA avec certaines fonctionnalités supplémentaires spécifiques à L'hibernation. Ainsi, l'application développée dans Hibernate peut ne pas être compatible lorsqu'on passe à une autre implémentation. Encore hiberné est le choix de la majorité des développeurs comme mise en œuvre JPA et largement utilisé.

un autre La mise en œuvre de L'app est ouverte (openjpa.apache.org) qui est une extension de la mise en œuvre de Kodo.

16
répondu supernova 2013-12-04 05:19:12

JPA: est tout comme une interface et n'ont aucune mise en œuvre concrète de lui d'utiliser des fonctions qui sont là dans JPA.

hibernation: est juste un Fournisseur JPA qui ont la mise en œuvre des fonctions dans JPA et peut avoir certaines fonctions supplémentaires qui pourraient ne pas être là dans JPA.

conseil : vous pouvez utiliser

     *combo 1* : JPA + JPA Provider(Hibernate) 
     *combo 2* : only Hiberante which does not need any interface 

Combo 1 : est utilisé lorsque vous estimez que votre hibernation ne donne pas de meilleures performances et que vous voulez changer de fournisseur JPA à ce moment-là, vous n'avez pas à écrire votre JPA une fois de plus. Vous pouvez écrire un autre fournisseur JPA ... et peut changer autant de fois que vous le pouvez.

Combo 2 : est utilisé beaucoup moins que lorsque vous n'allez pas changer votre fournisseur JPA à tout prix.

Visite http://blog-tothought.rhcloud.com//post/2 , où votre confusion totale sera claire.

15
répondu vkrishna17 2015-08-03 09:06:15

JPA est l'interface, Hibernate est une implémentation de cette interface.

11
répondu Thiago Burgos 2015-04-21 13:09:16

JPA est une spécification de normaliser les ORM-Api. Hibernate est un vendeur d'une mise en œuvre de L'app. Donc, si vous utilisez JPA avec hibernate, vous pouvez utiliser L'API standard JPA, hibernate sera sous le capot, offrant quelques fonctions non standard. Voir http://docs.jboss.org/hibernate/stable/entitymanager/reference/en/html_single / et http://docs.jboss.org/hibernate/stable/annotations/reference/en/html_single /

10
répondu kandarp 2012-03-27 03:51:08

JPA est juste une spécification.Sur le marché, il y a de nombreux vendeurs qui mettent en œuvre JPA. Différents types de fournisseurs mettent en œuvre L'app de manière différente. ainsi, différents types de fournisseurs offrent des fonctionnalités différentes, donc choisissez un fournisseur approprié en fonction de vos exigences.

si vous utilisez Hibernate ou tout autre fournisseur à la place de JPA que vous ne pouvez pas facilement passer à l'hibernation à EclipseLink ou OpenJPA à L'hibernation.Mais si vous utilisez JPA que vous avez juste à changer fournir dans le fichier de persistance XML.La migration est donc facilement possible dans le cadre de L'app.

5
répondu sus007 2014-04-08 08:41:38

JPA est une API, qui Hibernate met en œuvre.L'hibernation date d'avant le JPA. Avant JPA, vous écrivez le code d'hibernation natif pour faire votre ORM. JPA est juste l'interface, donc maintenant vous écrivez le code JPA et vous devez trouver une implémentation. Il se trouve que l'hibernation est une mise en œuvre.

donc vos choix sont Ceci: hibernation, toplink,etc...

L'avantage de JPA est qu'il vous permet d'échanger votre mise en œuvre si nécessaire. L'inconvénient est que les le natif hiberné / toplink/etc... L'API peut offrir des fonctionnalités que la spécification JPA ne supporte pas.

4
répondu Vanishree Gv 2016-01-29 06:24:42

alors que JPA est la spécification, Hibernate est le fournisseur de mise en œuvre qui suit les règles dictées dans la spécification.

4
répondu javierZanetti 2016-05-11 18:19:04

Java-son indépendance n'est pas seulement du système d'exploitation, mais aussi du vendeur.

par conséquent, vous devrait être capable de déployer votre application sur différents serveurs d'application. JPA est implémenté dans N'importe quel serveur D'application compatible Java EE et il permet d'échanger des serveurs d'application, mais la mise en œuvre est également en train de changer. Une application D'hibernation peut être plus facile à déployer sur un autre serveur d'application.

3
répondu Aleksey Bykov 2014-07-29 20:03:12

JPA est une spécification que vous implémentez dans votre couche de données pour effectuer des opérations db, ou des mappages et d'autres tâches requises.

comme il est juste une spécification , vous avez besoin d'un outil pour le faire mettre en œuvre. Cet outil peut être soit hiberné, TopLink, iBatis,spring-data etc.

vous n'avez pas nécessairement besoin de JPA si vous utilisez Hibernate dans votre couche de données. Mais si vous utilisez la spécification JPA pour L'hibernation, alors il permettra de passer à d'autres outils ORM comme iBatis, TopLink facile à l'avenir, parce que la spécification est commune pour d'autres aussi bien.

*( si vous vous souvenez, vous n' import javax.persistence.*; lorsque vous utilisez des annotations OU de cartographie (comme @Id @Colonne, @GeneratedValue etc.) dans Hibernate, c'est là que vous utilisez JPA sous Hibernate, vous pouvez utiliser @Query & autres fonctionnalités de JPA aussi bien )

3
répondu Arun Raaj 2018-03-12 07:18:09

JPA est une spécification de L'API Java qui décrit la gestion des données relationnelles dans les applications utilisant la plate-forme Java. où as Hibernate est une bibliothèque ORM (Object Relational Mapping) qui suit les spécifications JPA.

vous pouvez penser JPA comme un ensemble de règles qui est mis en œuvre par Hibernate.

2
répondu Badal 2013-12-31 10:13:59

JPA est JSR c'est à dire Spécifications de Java Obligation de mettre en œuvre le Mapping Objet-Relationnel qui n'a pas de code spécifique pour sa mise en œuvre. Il définit un certain ensemble de règles pour l'accès, la persistance et la gestion des données entre les objets Java et la base de données relationnelle avec son introduction, EJB a été remplacé car il a été critiqué pour être lourd par la communauté des développeurs Java. L'hibernation est l'un des moyens de mettre en œuvre le JPA à l'aide des lignes directrices de l'et.Hibernate est un le service de recherche et de persistance relationnelle et objet haute performance, qui est sous licence libre GNU Lesser General Public License (LGPL) .L'avantage de ceci est que vous pouvez échanger la mise en œuvre de JPA de Hibernate pour une autre mise en œuvre de la spécification JPA. Lorsque vous utilisez straight Hibernate, vous vous bloquez dans l'implémentation parce que d'autres ORMs peuvent utiliser des méthodes/configurations et des annotations différentes, donc vous ne pouvez pas simplement passer à un autre ORM.

2
répondu codechefvaibhavkashyap 2015-12-15 07:29:47

JPA est juste une spécification qui nécessite une mise en œuvre concrète. L'implémentation par défaut fournie par oracle est "Eclipselink" maintenant. Toplink est donné par Oracle à Eclipse foundation pour fusionner avec eclipselink.

en utilisant Eclipselink, on peut être sûr que le code est portable à n'importe quelle implémentation si le besoin se présente. Hibernate est également une mise en œuvre complète de L'app + PLUS. Hibernate est super ensemble de JPA avec certaines fonctionnalités supplémentaires spécifiques à L'hibernation. So application développé dans Hibernate peut ne pas être compatible quand commuté à une autre mise en œuvre. Encore hiberné est le choix de la majorité des développeurs comme mise en œuvre JPA et largement utilisé.

une autre mise en œuvre de L'app est OpenJPA, qui est une extension de la mise en œuvre de Kodo.

JPA vs Hibernate

1
répondu 2017-07-28 19:51:21

j'essaie de l'expliquer en des mots très simples.

supposons que vous avez besoin d'une voiture que nous savons tous leur sont plusieurs un fabricant de classe comme MERCEDES, BMW , AUDI etc.

maintenant dans la déclaration ci-dessus voiture(est une spécification) que chaque voiture ont des caractéristiques communes comme chose avec 4 roues et peut être conduite sur la route est voiture...donc son comme JPA. Et MERCEDES, BMW, AUDI etc sont juste en utilisant caractéristique de voiture commune et d'ajouter des fonctionnalités en fonction de leur base de clients afin ils mettent en œuvre les spécifications de la voiture comme hibernate , iBATIS, etc.

donc, par ces caractéristiques communes va à jpa et hibernate est juste une mise en œuvre en fonction de leur besoin jboss.

1 chose de plus

JPA comprend certaines propriétés de base donc à l'avenir, si vous voulez changer hibernate à toute autre mise en œuvre, vous pouvez facilement basculer sans trop de maux de tête et pour ces propriétés de base comprend les annotations JPA qui peuvent travailler pour n'importe quelle technologie de mise en œuvre, les requêtes JPQL.

donc principalement nous mettons en œuvre hibernate avec la technologie de type JPA juste pour dans le cas où nous voulons changer notre mise en œuvre en fonction des besoins du client plus vous écrirez moins de code que certaines fonctionnalités communes sont impliquées dans JPA. Si quelqu'un n'est toujours pas clair alors vous pouvez commenter comme je suis nouveau sur le débordement de la pile.

Merci

1
répondu rajiv baghel 2017-12-15 07:26:45

JPA est juste une spécification tandis que Hibernate est l'un des fournisseurs JPA I. l'hibernation est en train de mettre en œuvre divers éléments mentionnés dans le contrat de L'app.

0
répondu user1157635 2017-04-01 04:15:04

JPA ou Java Persistence API est une spécification standard pour les mises en œuvre ORM tandis que Hibernate est la mise en œuvre ou le cadre réel de ORM.

0
répondu Amit Gujarathi 2017-06-03 12:46:06

JPA is Java Persistence API. Qui spécifie seulement les spécifications pour les API. Signifie que l'ensemble des règles et des lignes directrices pour la création des IPA. Si, dit un autre contexte, C'est l'ensemble de normes qui fournit le wrapper pour la création de ces Api , peut être utilisé pour accéder entité-objet de base de données. JPA est fourni par oracle.Quand nous allons faire l'accès à la base de données , nous avons vraiment besoin de sa mise en œuvre. Signifie que L'app ne spécifie que des lignes directrices pour la mise en œuvre des IPA. Hibernate est un Fournisseur ou fournisseur D'un APP qui est responsable de la mise en œuvre de cet IPA. Comme Hibernate TopLink et Open JPA sont quelques exemples de fournisseurs D'API JPA. Nous utilisons donc des APIs standards spécifiés par le JPA à travers hibernation.

-1
répondu Mr.DevEng 2017-09-30 09:52:01

au sens figuré JPA est juste interface, Hibernate / TopLink-class (i.e. interface implementation).

vous devez avoir l'implémentation d'interface pour utiliser l'interface. Mais vous pouvez utiliser la classe via l'interface, c'est-à-dire utiliser Hibernate via L'API JPA ou vous pouvez utiliser l'implémentation directement, c'est-à-dire utiliser Hibernate directement, pas via L'API JPA pure.

Bon livre sur JPA est "Haute Performance Java Persistence" de Vlad Mihalcea.

-2
répondu Anton Tupy 2018-01-11 09:19:01