it-swarm.com.de

Was ist der Unterschied zwischen JPA und Hibernate?

Ich verstehe, dass JPA 2 eine Spezifikation und Hibernate ein Werkzeug für ORM ist. Ich verstehe auch, dass Hibernate mehr Funktionen als JPA 2 hat. Aber was ist aus praktischer Sicht der Unterschied?

Ich habe Erfahrung mit iBatis und versuche nun, entweder Hibernate oder JPA2 zu lernen. Ich habe das Pro JPA2-Buch aufgegriffen und es bezieht sich weiterhin auf "JPA-Anbieter". Zum Beispiel:

Wenn Sie der Meinung sind, dass eine Funktion standardisiert sein sollte, sollten Sie dies bei Ihrem JPA-Anbieter erfragen

Das verwirrt mich und ich habe ein paar Fragen:

  • Wenn ich nur JPA2 verwende, kann ich Daten aus der Datenbank abrufen, indem ich einfach meine POJOs beschrifte
  • Soll JPA2 mit einem "JPA-Provider" verwendet werden, z. B. TopLink oder Hibernate? Wenn ja, was ist der Vorteil von JPA2 + Hibernate im Vergleich zu JPA2 alleine oder im Vergleich zu Hibernate alleine?
  • Können Sie ein gutes praktisches JPA2-Buch empfehlen? "Pro JPA2" scheint eher eine Bibel und eine Referenz zu JPA2 zu sein (Fragen werden erst in der späteren Hälfte des Buches behandelt). Gibt es ein Buch, das einen Problem-/Lösungsansatz für JPA2 verfolgt?
682
Anthony

Da Sie angeben, dass JPA nur eine Spezifikation ist, gibt es keine Implementierung. Sie können Ihre Klassen mit JPA-Anmerkungen beliebig kommentieren, ohne Implementierung geschieht jedoch nichts. Stellen Sie sich JPA als die Richtlinien vor, die befolgt werden müssen, oder als eine Schnittstelle, während die JPA-Implementierung von Hibernate Code ist, der die in der JPA-Spezifikation definierte API erfüllt und die Funktionalität unter der Haube bietet.

Wenn Sie Hibernate mit JPA verwenden, verwenden Sie tatsächlich die Hibernate-JPA-Implementierung. Dies hat den Vorteil, dass Sie die Implementierung von JPA durch Hibernate gegen eine andere Implementierung der JPA-Spezifikation austauschen können. Wenn Sie Straight Hibernate verwenden, sind Sie an die Implementierung gebunden, da andere ORMs möglicherweise andere Methoden/Konfigurationen und Anmerkungen verwenden. Daher können Sie nicht einfach zu einem anderen ORM wechseln.

Für eine genauere Beschreibung lesen Sie bitte mein Blogeintrag .

777
Kevin Bowersox

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

633
johnm

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

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

Hibernate (2003) bot eine Möglichkeit, SQL zu abstrahieren und Entwicklern das Denken in Bezug auf persistente Objekte (ORM) zu ermöglichen. Sie benachrichtigen den Ruhezustand über Ihre Entitätsobjekte und es wird automatisch die Strategie generiert, diese zu erhalten. Hibernate stellte hierfür eine Implementierung bereit und die API, 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 (Ruhezustand) verknüpft wird, was nach Ansicht vieler Leute allgemeiner sein sollte. Daher ist eine generische Persistenz-API erforderlich.

In der Zwischenzeit entwickelte das JCP mit vielen Beiträgen von Hibernate und anderen ORM-Tool-Anbietern JSR 220 (Java Specification Request), was zu JPA 1.0 (2006) und schließlich zu JSR 317 (JPA 2.0 (2009)) führte. Dies sind die Spezifikationen einer generischen Java Persistenz-API. Die API wird im JDK als eine Reihe von Schnittstellen bereitgestellt, sodass Ihre Klassen von der javax.persistence abhängen können und sich nicht um den bestimmten Anbieter kümmern müssen, der die Arbeit zum Speichern Ihrer Objekte leistet. Dies ist nur die API und nicht die Implementierung. Hibernate wird nun zu einem der vielen Anbieter, die die JPA 2.0-Spezifikation implementieren. Sie können in Richtung JPA codieren und den für Ihre Anforderungen geeigneten ORM-Anbieter auswählen.

Es gibt Fälle, in denen Hibernate Funktionen bietet, die in JPA nicht codiert sind. In diesem Fall können Sie eine spezielle Anmerkung für den Ruhezustand direkt in Ihre Klasse einfügen, da JPA keine Schnittstelle für diese Aufgabe bietet.

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

158
Ken Block

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 hat das Beste aus all diesen Tools zusammengetragen und so den Persistenz-API-Standard Java erstellt.

Eine standardmäßige Persistenz-API ist aus Client-Sicht sehr praktisch, sodass es relativ einfach ist, eine Implementierung gegen die andere zu tauschen (obwohl dies in der Praxis nicht der Fall ist einfach, weil Sie bei großen Projekten ohnehin bestimmte nicht standardmäßige Funktionen verwenden müssen).

Das Standard-JPA hat die Java ORM-Konkurrenz auf ein neues Niveau gebracht, und dies kann nur zu besseren Implementierungen führen.

Wie in mein Buch, High-Performance Java Persistence erläutert, Hibernate bietet Funktionen, die von JPA noch nicht unterstützt werden :

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

100
Vlad Mihalcea

Aus dem Wiki .

Motivation zum Erstellen der Java Persistenz-API

Viele Java Enterprise-Entwickler verwenden kompakte persistente Objekte, die von Open-Source-Frameworks oder Data Access Objects bereitgestellt werden, anstelle von Entity-Beans. Entity-Beans und Enterprise-Beans galten als zu schwer und kompliziert, und man konnte sie nur verwenden in Java EE-Anwendungsservern. Viele der Funktionen der Persistenz-Frameworks von Drittanbietern wurden in die Java Persistenz-API integriert. Ab 2006 wurden Projekte wie Hibernate (Version 3.2) und Open-Source-Version TopLink Essentials zu Implementierungen der Java Persistenz-API.

Wie auf der Seite JCP angegeben, ist der Eclipse-Link die Referenzimplementierung für JPA. Schauen Sie sich diese Antwort an, um mehr darüber zu erfahren.

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

Hibernate ist das beliebteste ORM Framework, sobald das JPA Hibernate wurde eingeführt und entspricht den JPA Spezifikationen. Abgesehen von der Grundausstattung an Spezifikationen, die dem Ruhezustand folgen sollen, bietet es eine ganze Reihe zusätzlicher Dinge.

58
ManuPK

JPA ist nur eine Spezifikation, die konkret umgesetzt werden muss. Die Standardimplementierung, die Oracle zur Verfügung stellt, ist jetzt "Eclipselink". (Toplink wird von Oracle an die Eclipse Foundation gespendet, um mit Eclipselink zu fusionieren.)

(Referenz: http://www.Oracle.com/technetwork/middleware/toplink/index-085257.htmlhttp://www.Eclipse.org/org/press-release /20080317_Eclipselink.php )

Mit Eclipselink kann man sicher sein, dass der Code bei Bedarf auf jede Implementierung portierbar ist. Hibernate ist auch eine vollständige JPA-Implementierung + MORE (Sort of JPA Plus). Hibernate ist ein Super-Set von JPA mit einigen zusätzlichen Hibernate-spezifischen Funktionen. Daher ist die in Hibernate entwickelte App möglicherweise nicht kompatibel, wenn sie auf eine andere Implementierung umgestellt wird. Der Ruhezustand wird von den meisten Entwicklern als JPA-Implementierung gewählt und ist weit verbreitet.

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

16
supernova

JPA: ist genau wie eine Schnittstelle und hat keine konkrete Implementierung, um dort vorhandene Funktionen zu verwenden in JPA.

Hibernate: ist nur ein JPA-Provider , der die Funktionen in JPA implementiert und einige haben kann zusätzliche Funktionen, die in JPA möglicherweise 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 erbringt und Sie den JPA-Provider wechseln möchten, wenn Sie Ihren nicht schreiben müssen JPA noch einmal. Sie können einen anderen JPA-Provider schreiben ... und so oft Sie können ändern.

Combo 2: wird weniger verwendet, als wenn Sie Ihren JPA-Provider nicht um jeden Preis wechseln.

Besuchen Sie http://blog-tothought.rhcloud.com//post/2 , wo Ihre völlige Verwirrung deutlich wird.

15
vkrishna17

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

11
Thiago Burgos

JPA ist eine Spezifikation zur Standardisierung von ORM-APIs. Hibernate ist ein Anbieter einer JPA-Implementierung. Wenn Sie also JPA mit Ruhezustand verwenden, können Sie die Standard-JPA-API verwenden. Der Ruhezustand ist unter der Haube und bietet einige weitere nicht standardmäßige Funktionen. Siehe http://docs.jboss.org/hibernate/stable/entitymanager/reference/en/html_single/ und http://docs.jboss.org/hibernate/stable/annotations)/reference/de/html_single /

10
kandarp

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

Wenn Sie Hibernate oder einen anderen Anbieter anstelle von JPA verwenden, können Sie nicht einfach in den Ruhezustand zu EclipseLink oder OpenJPA in den Ruhezustand übergehen JPA.

5
sus007

JPA ist eine API, die von Hibernate implementiert wird. Hibernate ist älter als JPA. Vor JPA schreiben Sie nativen Ruhezustandcode, um den ORM durchzuführen. JPA ist nur die Schnittstelle. Jetzt schreiben Sie JPA-Code und müssen eine Implementierung finden. Hibernate ist eine Implementierung.

Sie haben folgende Auswahlmöglichkeiten: Ruhezustand, Top-Link usw.

Der Vorteil von JPA besteht darin, dass Sie Ihre Implementierung bei Bedarf austauschen können. Der Nachteil ist, dass die native Hibernate/Toplink/etc ... -API möglicherweise Funktionen bietet, die von der JPA-Spezifikation nicht unterstützt werden.

4
Vanishree Gv

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

4
javierZanetti

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

Daher sollten Sie in der Lage sein , Ihre Anwendung auf verschiedenen Anwendungsservern bereitzustellen. JPA ist in jedem Java EE-kompatiblen Anwendungsserver implementiert und ermöglicht das Austauschen von Anwendungsservern, die Implementierung ändert sich jedoch ebenfalls. Eine Hibernate-Anwendung ist möglicherweise einfacher auf einem anderen Anwendungsserver bereitzustellen.

3
Aleksey Bykov

JPA ist eine Spezifikation, die Sie in Ihrer Datenschicht implementieren, um Datenbankoperationen, OR Zuordnungen und andere erforderliche Aufgaben auszuführen.

Da es nur eine Spezifikation ist, benötigen Sie ein Tool, um es zu implementieren. Das Tool kann entweder Hibernate, TopLink, iBatis, Federdaten usw. sein.

Sie benötigen nicht unbedingt JPA, wenn Sie den Ruhezustand in Ihrer Datenebene verwenden. Wenn Sie jedoch die JPA-Spezifikation für den Ruhezustand verwenden, wird der Wechsel zu anderen ORM-Tools wie iBatis und TopLink in Zukunft einfacher, da die Spezifikation auch für andere gilt.

* ( Wenn Sie sich erinnern, tun Sie import javax.persistence.*;, wenn Sie Anmerkungen für OR -Zuordnungen (wie @Id, @Column, @GeneratedValue usw.) im Ruhezustand verwenden Hier verwenden Sie JPA im Ruhezustand. Sie können auch die @Query- und andere Funktionen von JPA verwenden. )

3
Arun Raaj

JPA ist JSR, d. H. Java Spezifikationsanforderung zum Implementieren der objektrelationalen Zuordnung, die keinen spezifischen Code für ihre Implementierung hat. Es definiert bestimmte Regeln für den Zugriff auf, 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 Entwickler-Community als schwergewichtig kritisiert wurde. Hibernate ist eine der Möglichkeiten, mit denen JPA mithilfe der Richtlinien implementiert werden kann. Hibernate ist ein leistungsstarker Objekt-/relationaler Persistenz- und Abfragedienst, der unter der Open Source GNU Lesser General Public License (LGPL) lizenziert ist. Der Vorteil von Dies bedeutet, dass Sie die Implementierung von JPA durch Hibernate gegen eine andere Implementierung der JPA-Spezifikation austauschen können. Wenn Sie Straight Hibernate verwenden, sind Sie an die Implementierung gebunden, da andere ORMs möglicherweise andere Methoden/Konfigurationen und Anmerkungen verwenden. Daher können Sie nicht einfach zu einem anderen ORM wechseln.

JPA ist eine API-Spezifikation Java, die die Verwaltung relationaler Daten in Anwendungen unter Verwendung der Plattform Java beschreibt. Dabei ist als Ruhezustand eine ORM-Bibliothek (Object Relational Mapping), die der JPA-Spezifikation entspricht.

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

2
Badal

JPA ist nur eine Spezifikation, die konkret umgesetzt werden muss. Die von Oracle bereitgestellte Standardimplementierung ist jetzt "Eclipselink". Toplink wird von Oracle an die Eclipse Foundation gespendet, um mit Eclipselink zu fusionieren.

Mit Eclipselink kann man sicher sein, dass der Code bei Bedarf auf jede Implementierung portierbar ist. Hibernate ist auch eine vollständige JPA-Implementierung + MEHR. Hibernate ist ein Super-Set von JPA mit einigen zusätzlichen Hibernate-spezifischen Funktionen. Daher ist eine in Hibernate entwickelte Anwendung möglicherweise nicht kompatibel, wenn auf eine andere Implementierung umgestellt wird. Der Ruhezustand wird von den meisten Entwicklern als JPA-Implementierung gewählt und ist weit verbreitet.

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

JPA vs Hibernate

1
user8383675

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

Angenommen, Sie brauchen ein Auto, da wir alle wissen, dass es mehrere A-Klasse-Hersteller wie MERCEDES, BMW, AUDI usw. gibt.

Jetzt in der obigen Aussage CAR (ist eine Spezifikation), wie jedes Auto gemeinsame Merkmale wie etwas mit 4 Rädern und kann auf der Straße gefahren werden ist Auto ... so ist es wie JPA. Und MERCEDES, BMW, AUDI usw. nutzen nur die üblichen Fahrzeugfunktionen und fügen Funktionen entsprechend ihrer Kundenbasis hinzu, sodass sie die Fahrzeugspezifikationen wie Ruhezustand, iBATIS usw. implementieren.

Durch diese gemeinsamen Funktionen geht jpa und hibernate ist nur eine Implementierung, die ihrem jboss-Bedarf entspricht.

1 weitere Sache

JPA enthält einige grundlegende Eigenschaften. Wenn Sie also in Zukunft den Ruhezustand in eine andere Implementierung ändern möchten, können Sie problemlos und ohne viel Kopfzerbrechen wechseln. Zu diesen grundlegenden Eigenschaften gehören JPA-Annotationen, die für jede Implementierungstechnologie geeignet sind, JPQL-Abfragen.

Daher implementieren wir hauptsächlich den Ruhezustand mit JPA-Technologie, nur für den Fall, dass wir unsere Implementierung gemäß den Kundenanforderungen ändern möchten. Außerdem schreiben Sie weniger Code, da einige gemeinsame Funktionen in JPA enthalten sind. Wenn jemand immer noch nicht klar ist, können Sie einen Kommentar zum Stapelüberlauf abgeben, da ich neu bin.

Danke

1
rajiv baghel

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

0
Amit Gujarathi

JPA ist nur eine Spezifikation, während Hibernate einer der JPA-Anbieter ist, d. H. Hibernate implementiert verschiedene im JPA-Vertrag genannte Dinge.

0
user1157635