678 Stimmen

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 hat als JPA 2. Aber was 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 Buch Pro JPA2 in die Hand genommen und es verweist immer wieder auf den "JPA-Provider". Zum Beispiel:

Wenn Sie der Meinung sind, dass eine Funktion standardisiert werden sollte, sollten Sie sich zu Wort melden. und fordern Sie sie bei Ihrem JPA-Anbieter an

Das verwirrt mich, deshalb habe ich ein paar Fragen:

  • Mit JPA2 allein kann ich Daten aus der DB abrufen, indem ich einfach meine POJOs annotiere
  • Soll JPA2 mit einem "JPA-Provider", z. B. TopLink oder Hibernate, verwendet werden? Wenn ja, welche Vorteile bietet die Verwendung von JPA2 + Hibernate im Vergleich zu JPA2 allein oder im Vergleich zu Hibernate allein?
  • Können Sie ein gutes praktisches JPA2-Buch empfehlen? "Pro JPA2" scheint eher eine Bibel und ein Nachschlagewerk für JPA2 zu sein (es geht erst in der zweiten Hälfte des Buches auf Abfragen ein). Gibt es ein Buch, das einen Problem/Lösungsansatz für JPA2 bietet?

15voto

vkrishna17 Punkte 866

JPA : ist genau wie ein Schnittstelle und haben keine konkrete Implementierung davon, um Funktionen zu verwenden, die in JPA vorhanden sind.

Hibernate : ist nur eine JPA-Anbieter die die Implementierung der Funktionen in JPA haben und einige zusätzliche Funktionen haben können, die in JPA möglicherweise nicht vorhanden sind.

TIPP: Sie können Folgendes verwenden

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

Kombi 1 JPA-Provider: wird verwendet, wenn Sie das Gefühl haben, dass Ihr Hibernate keine bessere Leistung bringt und Sie den JPA-Provider ändern möchten, damit Sie Ihr JPA nicht noch einmal schreiben müssen. Sie können einen anderen JPA-Provider schreiben ... und so oft wie möglich ändern.

Kombi 2 : wird sehr selten verwendet, wenn Sie Ihren JPA-Provider nicht um jeden Preis ändern wollen.

Besuchen Sie http://blog-tothought.rhcloud.com//post/2 wo sich Ihre ganze Verwirrung klären wird.

15voto

supernova Punkte 2864

JPA ist nur eine Spezifikation, die konkret umgesetzt werden muss. Die Standardimplementierung Orakel 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 )

Durch die Verwendung von Eclipselink kann man sicher sein, dass der Code bei Bedarf auf jede beliebige Implementierung übertragbar ist. Hibernate ist auch eine vollständige JPA-Implementierung + MEHR (eine Art JPA Plus). Hibernate ist ein Super-Set von JPA mit einigen zusätzlichen Hibernate-spezifischen Funktionen. Daher kann eine in Hibernate entwickelte Anwendung nicht kompatibel sein, wenn sie auf eine andere Implementierung umgestellt wird. Dennoch wird Hibernate von der Mehrheit der Entwickler als JPA-Implementierung gewählt und weithin verwendet.

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

11voto

Thiago Burgos Punkte 857

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

10voto

kandarp Punkte 4799

JPA ist eine Spezifikation zur Standardisierung von ORM-APIs. Hibernate ist ein Anbieter einer JPA-Implementierung. Wenn Sie also JPA mit Hibernate verwenden, können Sie die standardmäßige JPA-API nutzen, während Hibernate unter der Haube einige nicht standardmäßige Funktionen anbietet. Siehe http://docs.jboss.org/hibernate/stable/entitymanager/reference/en/html_single/ y http://docs.jboss.org/hibernate/stable/annotations/reference/en/html_single/

5voto

sus007 Punkte 297

JPA ist nur eine Spezifikation, und auf dem Markt gibt es viele Anbieter, die JPA implementieren. Verschiedene Arten von Anbietern implementieren JPA auf unterschiedliche Art und Weise. So bieten verschiedene Arten von Anbietern unterschiedliche Funktionen, so wählen Sie richtige Anbieter auf der Grundlage Ihrer Anforderungen.

Wenn Sie Hibernate oder andere Anbieter anstelle von JPA verwenden, dann können Sie nicht einfach zu Hibernate zu EclipseLink oder OpenJPA zu Hibernate verschieben. Aber wenn Sie JPA verwenden, dann müssen Sie nur in der Persistenz XML-Datei ändern.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X