java - tutorial - jpa version




Was ist der Unterschied zwischen JPA und Hibernate? (16)

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?

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


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.


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 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 der Tanz, Hibernate ist der Tänzer.


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


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 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.


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


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.


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


Manche Dinge sind zu schwer zu verstehen ohne eine historische Perspektive der Sprache und des Verständnisses des JCP.

Oft gibt es Dritte, die Pakete entwickeln, die eine Funktion erfüllen oder eine Lücke füllen, die nicht Teil des offiziellen JDK sind. Aus verschiedenen Gründen kann diese Funktion durch den JCP (Java Community Process) Teil des Java JDK werden

Hibernate (2003) bot eine Möglichkeit, SQL zu abstrahieren und Entwicklern zu ermöglichen, mehr über persistente Objekte (ORM) nachzudenken. Sie benachrichtigen Hibernate über Ihre Entity-Objekte und es generiert automatisch die Strategie, um sie zu erhalten. Hibernate stellte hierfür eine Implementierung und die API bereit, um die Implementierung entweder über XML-Konfiguration oder Anmerkungen zu steuern.

Das grundlegende Problem besteht nun darin, dass Ihr Code eng mit einem bestimmten Anbieter (Hibernate) verbunden ist, was viele Leute für generischer halten sollten. Daher die Notwendigkeit einer generischen Persistenz-API.

In der Zwischenzeit entwickelte der JCP mit viel Input von Hibernate und anderen Anbietern von ORM-Tools JSR 220 (Java Specification Request), was zu JPA 1.0 (2006) und schließlich zu JSR 317 führte, was JPA 2.0 (2009) ist. Dies sind Spezifikationen einer generischen Java Persistence API. Die API wird im JDK als eine Reihe von Schnittstellen zur Verfügung gestellt, so dass Ihre Klassen von der javax.persistence abhängen können und sich nicht um den bestimmten Anbieter kümmern müssen, der Ihre Objekte persistent macht. Dies ist nur die API und nicht die Implementierung. Hibernate wird jetzt einer der vielen Anbieter, die die JPA 2.0-Spezifikation implementieren. Sie können für JPA kodieren und auswählen, welcher konforme ORM-Anbieter Ihren Anforderungen entspricht.

Es gibt Fälle, in denen Hibernate Ihnen Funktionen zur Verfügung stellt, die nicht in JPA kodifiziert sind. In diesem Fall können Sie eine Hibernate-spezifische Annotation direkt in Ihre Klasse einfügen, da JPA die Schnittstelle für diese Aufgabe nicht bereitstellt.

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


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


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: ist wie eine Schnittstelle und hat keine konkrete Implementierung, um Funktionen zu verwenden, die in JPA vorhanden sind.

Hibernate: ist nur ein JPA-Provider, der die Implementierung der Funktionen in JPA hat und einige zusätzliche Funktionen haben kann, die in JPA nicht vorhanden sind.

TIPP: Sie können verwenden

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

Combo 1 : Wird verwendet, wenn Sie der Meinung sind, dass Ihr Ruhezustand keine bessere Leistung bietet und Sie JPA Provider ändern möchten, wenn Sie Ihre JPA nicht noch einmal schreiben müssen. Du kannst einen anderen JPA Provider schreiben ... und kannst so oft wie möglich wechseln.

Combo 2 : Wird sehr wenig benutzt, wenn Sie Ihren JPA-Provider nicht um jeden Preis ändern.

Besuchen Sie http://blog-tothought.rhcloud.com//post/2 , wo Ihre komplette Verwirrung klar wird.





orm