java tutorial Was ist der Unterschied zwischen JPA und Hibernate?




jpa version (19)

Ich verstehe, dass JPA 2 eine Spezifikation und Hibernate ein Werkzeug für ORM ist. Außerdem verstehe ich, dass Hibernate mehr Funktionen als JPA 2 hat. Was aber ist aus praktischer Sicht wirklich der Unterschied?

Ich habe Erfahrung mit iBatis und jetzt versuche ich entweder Hibernate oder JPA2 zu lernen. Ich habe das Pro JPA2 Buch genommen und es bezieht sich immer auf "JPA Provider". Beispielsweise:

Wenn Sie der Meinung sind, dass eine Funktion standardisiert werden sollte, sollten Sie sich bei Ihrem JPA-Anbieter erkundigen

Das verwirrt mich und ich habe ein paar Fragen:

  • Mit JPA2 alleine kann ich Daten aus der Datenbank holen, indem ich einfach meine POJOs annotiere
  • Soll JPA2 mit einem "JPA Provider" wie TopLink oder Hibernate verwendet werden? Wenn ja, was ist der Vorteil von JPA2 + Hibernate gegenüber JPA2 allein oder im Vergleich zu Hibernate allein?
  • Kannst du ein gutes praktisches JPA2-Buch empfehlen? "Pro JPA2" scheint mehr wie eine Bibel und eine Referenz auf JPA2 zu sein (sie kommt erst in der späteren Hälfte des Buches in Abfragen). Gibt es ein Buch, das JPA2 einen Problem / Lösungs-Ansatz bietet?

JPA ist nur eine Spezifikation, während Hibernate einer der JPA-Provider ist, dh Hibernate implementiert verschiedene Dinge, die im JPA-Vertrag erwähnt werden.


Während JPA die Spezifikation ist, ist Hibernate der Implementierungsanbieter, der die in der Spezifikation festgelegten Regeln befolgt.


Java - seine Unabhängigkeit ist nicht nur vom Betriebssystem, sondern auch vom Hersteller.

Daher sollten Sie Ihre Anwendung auf verschiedenen Anwendungsservern bereitstellen können. JPA ist in jedem Java EE-konformen Anwendungsserver implementiert und erlaubt den Austausch von Anwendungsservern, aber auch die Implementierung ändert sich. Eine Hibernate-Anwendung kann möglicherweise einfacher auf einem anderen Anwendungsserver bereitgestellt werden.


JPA ist JSR, dh Java Specification Requirement zur Implementierung von Object Relational Mapping, das keinen spezifischen Code für seine Implementierung hat. Es definiert bestimmte Regeln für den Zugriff, die Speicherung und die Verwaltung der Daten zwischen Java-Objekten und der relationalen Datenbank. Mit seiner Einführung wurde EJB ersetzt, da es von der Java-Entwicklergemeinde als Schwergewicht kritisiert wurde. Hibernate ist einer der Wege, wie JPA mit Hilfe von Richtlinien implementiert werden kann. Hibernate ist ein leistungsstarker Object / Relational Persistenz- und Abfrageservice, der unter der Open Source GNU Lesser General Public License (LGPL) lizenziert ist.Der Vorteil ist, dass Sie kann die Implementierung von JPA von Hibernate für eine andere Implementierung der JPA-Spezifikation austauschen. Wenn Sie geraden Hibernate verwenden, sperren Sie sich in die Implementierung, da andere ORMs möglicherweise andere Methoden / Konfigurationen und Anmerkungen verwenden, weshalb Sie nicht einfach zu einem anderen ORM wechseln können.


JPA ist eine Java-API-Spezifikation, die die Verwaltung relationaler Daten in Anwendungen beschreibt, die Java Platform verwenden. Hibernate ist eine ORM (Object Relational Mapping) -Bibliothek, die der JPA-Spezifikation folgt.

Sie können JPA als eine Reihe von Regeln betrachten, die von Hibernate implementiert werden.


JPA ist die Schnittstelle, Hibernate ist eine Implementierung dieser Schnittstelle.


Aus dem Wiki .

Motivation zum Erstellen der Java Persistence API

Viele Enterprise-Java-Entwickler verwenden leichtgewichtige persistente Objekte, die von Open-Source-Frameworks oder Data Access Objects anstelle von Entity-Beans bereitgestellt werden: Entity-Beans und Enterprise-Beans hatten den Ruf, zu schwergewichtig und kompliziert zu sein, und sie könnten nur in Java EE-Anwendungsservern verwendet werden. Viele der Funktionen der Persistenz-Frameworks von Drittanbietern wurden in die Java Persistence API integriert, und ab 2006 wurden Projekte wie Hibernate (Version 3.2) und Open-Source-Version TopLink Essentials zu Implementierungen der Java Persistence API.

Wie auf der JCP-Seite angegeben, ist die Eclipse-Verbindung die Referenzimplementierung für JPA. Schau dir diese Antwort etwas genauer an.

JPA selbst verfügt über Funktionen, die ein Standard-ORM-Framework ersetzen. Da JPA Teil der Java EE-Spezifikation ist, können Sie JPA allein in einem Projekt verwenden und es sollte mit allen Java EE-kompatiblen Servern funktionieren . Ja, diese Server haben die Implementierungen für die JPA-Spezifikation.

Hibernate ist das beliebteste ORM- Framework. Sobald JPA eingeführt wurde, entspricht Hibernate den JPA- Spezifikationen. Abgesehen von der grundlegenden Spezifikation, die es folgen sollte, bietet Hibernate eine ganze Menge zusätzlicher Dinge.


JPA ist nur eine Spezifikation, die eine konkrete Umsetzung erfordert. Die Standard-Implementierung von Oracle ist jetzt "Eclipselink". (Toplink wird von Oracle an die Eclipse Foundation gespendet, um mit Eclipselink zu verschmelzen)

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

Mit Eclipselink kann man sicher sein, dass der Code bei Bedarf in jede Implementierung portierbar ist. Hibernate ist auch eine vollständige JPA-Implementierung + MORE (Sort of JPA Plus). Hibernate ist ein Super-JPA-Set mit einigen zusätzlichen Hibernate-spezifischen Funktionen. Die in Hibernate entwickelte App ist möglicherweise nicht kompatibel, wenn sie auf eine andere Implementierung umgestellt wird. Still Winterschlaf ist Wahl der Mehrheit der Entwickler als JPA-Implementierung und weit verbreitet.

Eine weitere JPA-Implementierung ist OpenJPA (openjpa.apache.org), eine Erweiterung der Kodo-Implementierung.


Hibernate ist ein JPA-Anbieter.

Die Seite JPA Vs Hibernate von Krishna Srinivasan sagt:

JPA ist eine Spezifikation für den Zugriff, die Persistenz und die Verwaltung der Daten zwischen Java-Objekten und der relationalen Datenbank. Wie die Definition sagt, ist es nur die Spezifikation. Es gibt keine Implementierung für die API. JPA spezifiziert den Satz von Regeln und Richtlinien für die Entwicklung der Schnittstellen, die dem Standard folgen. Auf den Punkt gebracht: JPA ist nur eine Richtlinie, um das Object Relational Mapping (ORM) zu implementieren, und es gibt keinen zugrunde liegenden Code für die Implementierung. Wo, wie Hibernate ist die tatsächliche Umsetzung der JPA-Richtlinien. Wenn Hibernate die JPA-Spezifikation implementiert, wird dies von der JPA-Gruppe unter Einhaltung aller in der Spezifikation genannten Standards zertifiziert. Zum Beispiel würden die JPA-Richtlinien Informationen zu obligatorischen und optionalen Merkmalen bereitstellen, die als Teil der JPA-Implementierung implementiert werden.


JPA ist die Schnittstelle während Hibernate die Implementierung ist.

Traditionell gab es mehrere Java ORM-Lösungen:

Jede Implementierung definiert ihre eigene Zuordnungsdefinition oder Client-API. Die JPA-Expertengruppe sammelte das Beste aus all diesen Tools und erstellte daher den Java Persistence API-Standard.

Eine Standard-Persistenz-API ist vom Standpunkt des Clients sehr praktisch, so dass es relativ einfach ist, eine Implementierung mit der anderen zu wechseln (obwohl dies in der Praxis nicht so einfach ist, weil Sie bei großen Projekten sowieso spezielle Nicht-Standard-Funktionen verwenden müssen) .

Der Standard-JPA hat die Java-ORM-Konkurrenz auf ein neues Level gehoben und dies kann nur zu besseren Implementierungen führen.

Wie in meinem Buch "High-Performance Java Persistence" beschrieben , bietet Hibernate Funktionen, die JPA noch nicht unterstützt :

Mit diesen zusätzlichen Funktionen kann Hibernate viele Persistenzanforderungen erfüllen, die von großen Unternehmensanwendungen verlangt werden.


JPA oder Java Persistence API ist eine Standardspezifikation für ORM-Implementierungen, während Hibernate die eigentliche ORM-Implementierung oder das ORM-Framework darstellt.


JPA ist der Tanz, Hibernate ist der Tänzer.



JPA ist eine Spezifikation, die Sie in Ihrer Datenschicht implementieren, um DB-Operationen, ODER-Zuordnungen und andere erforderliche Tasks auszuführen.

Da es sich nur um eine Spezifikation handelt , benötigen Sie ein Werkzeug, um es implementieren zu lassen. Dieses Tool kann entweder Hibernate, TopLink, iBatis, Federdaten usw. sein.

Sie benötigen JPA nicht unbedingt, wenn Sie Hibernate in Ihrer Datenebene verwenden. Wenn Sie jedoch die JPA-Spezifikation für Hibernate verwenden, werden Sie in Zukunft auf andere ORM-Tools wie iBatis, TopLink easy umsteigen, da die Spezifikation auch für andere gilt.

* ( Wenn Sie sich erinnern, import javax.persistence.*; wenn Sie Anmerkungen für die OR-Zuordnung (wie @Id, @Column, @GeneratedValue usw.) in Hibernate verwenden, können Sie JPA unter Hibernate verwenden JPA @Query und andere Funktionen als auch )


JPA ist nur eine Spezifikation. Im Markt gibt es viele Anbieter, die JPA implementiert. Verschiedene Arten von Anbietern implementieren JPA auf unterschiedliche Weise. Daher bieten verschiedene Arten von Anbietern unterschiedliche Funktionen. Wählen Sie entsprechend Ihren Anforderungen den richtigen Anbieter.

Wenn Sie Hibernate oder andere Anbieter anstelle von JPA verwenden, können Sie nicht einfach in den Ruhezustand nach EclipseLink oder OpenJPA in Hibernate wechseln. Wenn Sie JPA verwenden, müssen Sie lediglich eine Persistenz-XML-Datei angeben. So ist die Migration problemlos möglich JPA.


Bildlich gesprochen ist JPA nur Schnittstelle, Hibernate / TopLink - Klasse (dh Schnittstellenimplementierung).

Sie müssen über eine Schnittstellenimplementierung verfügen, um die Schnittstelle zu verwenden. Aber Sie können die Klasse über die Schnittstelle verwenden, dh Hibernate über JPA-API verwenden oder Sie können die Implementierung direkt verwenden, dh verwenden Sie Hibernate direkt und nicht über die reine JPA-API.

Ein gutes Buch über JPA ist "High-Performance Java Persistence" von Vlad Mihalcea.


JPA ist Java Persistence API. Which Gibt nur die Spezifikationen für APIs an. Bedeutet, dass die Regeln und Richtlinien für die Erstellung der APIs gelten. Wenn es einen anderen Kontext sagt, ist es eine Reihe von Standards, die den Wrapper zum Erstellen dieser APIs bereitstellt, kann für den Zugriff auf Entitätsobjekt aus der Datenbank verwendet werden. JPA wird von Oracle zur Verfügung gestellt. Wenn wir Datenbankzugriffe durchführen wollen, brauchen wir definitiv seine Implementierung. Mittel JPA gibt nur Richtlinien für die Implementierung von APIs an. Hibernate ist ein JPA-Anbieter / Hersteller, der für die Implementierung dieser APIs zuständig ist. Wie Hibernate TopLink und Open JPA sind einige Beispiele für JPA-API-Anbieter. Daher verwenden wir JPA-spezifizierte Standard-APIs über Hibernate.


JPA ist nur eine Spezifikation, die eine konkrete Umsetzung erfordert. Die Standard-Implementierung von Oracle ist jetzt "Eclipselink". Toplink wird von Oracle an die Eclipse Foundation gespendet, um mit eclipselink zusammenzuarbeiten.

Mit Eclipselink kann man sicher sein, dass der Code bei Bedarf in jede Implementierung portierbar ist. Hibernate ist auch eine vollständige JPA-Implementierung + MEHR. Hibernate ist ein Super-JPA-Set mit einigen zusätzlichen Hibernate-spezifischen Funktionen. Eine Anwendung, die in Hibernate entwickelt wurde, ist möglicherweise nicht kompatibel, wenn sie auf eine andere Implementierung umgeschaltet wird. Still Winterschlaf ist Wahl der Mehrheit der Entwickler als JPA-Implementierung und weit verbreitet.

Eine weitere JPA-Implementierung ist OpenJPA, eine Erweiterung der Kodo-Implementierung.

JPA vs Hibernate


Ich versuche es in sehr einfachen Worten zu erklären.

Angenommen, Sie brauchen ein Auto, wie wir alle wissen, sind einige A-Klasse Hersteller wie MERCEDES, BMW, AUDI usw.

Jetzt in der obigen Aussage CAR (ist eine Spezifikation) wie jedes Auto gemeinsame Merkmale wie die Sache mit 4 Rädern und kann auf der Straße fahren ist Auto ... so ist es wie JPA. Und MERCEDES, BMW, AUDI usw. benutzen nur gewöhnliche Autofunktion und fügen Funktionalität entsprechend ihrem Kundenstamm hinzu, also implementieren sie die Autospezifikation wie Winterschlaf, iBATIS usw.

Also durch diese gemeinsamen Funktionen geht es um jpa und Hibernate ist nur eine Implementierung nach ihren jboss brauchen.

1 mehr Sache

JPA enthält einige grundlegende Eigenschaften, so dass Sie in Zukunft, wenn Sie den Ruhezustand in jede andere Implementierung ändern möchten, problemlos ohne großen Aufwand wechseln können. Zu diesen grundlegenden Eigenschaften gehören JPA-Anmerkungen, die für jede Implementierungstechnologie, JPQL-Abfragen, funktionieren.

Hauptsächlich implementieren wir Hibernate mit JPA-Technologie, nur für den Fall, dass wir unsere Implementierung je nach Kundenbedürfnis wechseln wollen, und Sie werden weniger Code schreiben, da einige allgemeine Funktionen in JPA involviert sind. Wenn jemand immer noch nicht klar ist, kannst du einen Kommentar als neu auf Stack-Überlauf kommentieren.

Vielen Dank





orm