Was ist der Unterschied zwischen JPA und Spring Data JPA?

144

Ich bin etwas verwirrt über den Unterschied zwischen Spring Data-JPA und JPA. Ich weiß über JPA, dass es sich um eine Spezifikation zum Speichern der Java-Objekte in einer relationalen Datenbank unter Verwendung der gängigen ORM-Technologie handelt.

Mit anderen Worten, JPA stellt Schnittstellen und andere ORM-Technologien bereit und implementiert die als JPA-Anbieter bekannten Schnittstellen, z. B. Hibernate.

Was genau ist Spring Data JPA?

Hat Spring Data JPA über JPA einige weitere Funktionen (Schnittstellen) hinzugefügt und ist diese weiterhin nur angegeben oder ist es auch ein JPA-Anbieter?

Ich habe gesehen, dass Spring Data JPA um Repositorys herum funktioniert (DAO-Schicht: wenn ich mich nicht irre). Also, ich meine, wie ist es anders, wenn 'Spring Data JPA + Hibernate' oder nur 'Hibernate' verwendet wird?

DHRUV BANSAL
quelle

Antworten:

126

Ich habe Spring gesehen, JPA arbeitet mit Repositories (DAO-Schicht: wenn ich mich nicht irre). Also meine ich, wie es anders ist, wenn man 'Spring JPA + Hibernate' verwendet oder nur 'Hibernate' direkt verwendet?

Wie Sie sagten, ist JPA eine Spezifikation, während Hibernate eine bestimmte Implementierung dieser Spezifikation ist (diese Implementierungen werden normalerweise als Anbieter bezeichnet ). Durch die Verwendung von Hibernate binden Sie sich an diesen Anbieter und schränken Ihre Freiheit ein, bei Bedarf zu einer anderen Option zu wechseln (z. B. möchten Sie stattdessen EclipseLink oder ObjectDB verwenden, da Hibernate einen Fehler aufweist, der Ihren Entwicklungsprozess anhält).

Zitiert von Spring Data JPA ‚s - Dokumentation:

Das Implementieren einer Datenzugriffsschicht einer Anwendung ist seit einiger Zeit umständlich. Es musste zu viel Code geschrieben werden. Domänenklassen waren anämisch und wurden nicht wirklich objektorientiert oder domänengesteuert entworfen.

Die Verwendung dieser beiden Technologien erleichtert Entwicklern das Leben in Bezug auf die Persistenz des Rich-Domain-Modells erheblich. Trotzdem ist die Menge an Boilerplate-Code zum Implementieren von Repositorys, insbesondere, immer noch recht hoch. Ziel der Repository-Abstraktion von Spring Data ist es daher, den Aufwand für die Implementierung von Datenzugriffsschichten für verschiedene Persistenzspeicher erheblich zu reduzieren.

Zusammenfassend lässt sich sagen, dass JPA zusätzlich zu einer weiteren Abstraktionsebene ein standardbasiertes Design definiert, um die Persistenzschicht in einem Spring-Kontext zu unterstützen. Diese definierten Schnittstellen (Spring bekannt) stellen die Dienste bereit, die das Framework mithilfe von JPA verarbeitet, um die Ergebnisse bereitzustellen. Sie definieren ein Repository so, dass Spring das Projekt scannen und finden kann:

<repositories base-package="com.acme.repositories" />

So können Sie es im Kontext eines Containers oder außerhalb davon verwenden.

Was genau ist Frühling, JPA? Ist Spring, JPA hat einige weitere Funktionen (Schnittstellen) über JPA hinzugefügt und es wird immer noch nur angegeben oder ist es auch ein JPA-Anbieter?

Spring Data JPA bietet eine Definition zum Implementieren von Repositorys, die unter der Haube unterstützt werden, indem auf die JPA-Spezifikation unter Verwendung des von Ihnen definierten Anbieters verwiesen wird.

Fritz
quelle
1
Kann ich Repository als eine Sammlung von Entitäten bezeichnen, die Spring verwaltet? Ich weiß nicht warum, aber die Unterstützung von Spring JPA mithilfe von Repositorys scheint dem EntityManager von EJB sehr ähnlich zu sein - ist das das richtige Denken oder unterscheiden sie sich in ihrem Zweck völlig? Danke im Voraus. Mustafa.
Mustafa
1
@Mustafa Die meisten Lösungen haben gemeinsame Gründe. Obwohl das Ziel möglicherweise dasselbe ist, unterscheidet sich die Implementierung aufgrund der beteiligten Schnittstellen.
Fritz
35

Die Java Persistence API, manchmal auch als JPA bezeichnet, ist ein Java-Framework, das relationale Daten in Anwendungen verwaltet, die Java Platform, Standard Edition (JavaSE) und Java Platform, Enterprise Edition (JavaEE) verwenden.

Die Persistenz umfasst in diesem Zusammenhang drei Bereiche:

  • Die im javax.persistencePaket definierte API selbst .

  • Die Java Persistence Query Language (JPQL).

  • Objektrelationale Metadaten.

    Geben Sie hier die Bildbeschreibung ein

Spring Data JPA ist Teil des Dachprojekts Spring Data, das die Implementierung von JPA-basierten Repositorys erleichtert.

Eigenschaften:

  • Anspruchsvolle Unterstützung beim Erstellen von Repositorys auf Basis von Spring und JPA
  • Unterstützung für QueryDSL-Prädikate und damit typsichere JPA-Abfragen
  • Transparente Prüfung der Domänenklasse
  • Paginierungsunterstützung, dynamische Abfrageausführung, Möglichkeit zur Integration von benutzerdefiniertem Datenzugriffscode
  • Validierung @Querykommentierter Abfragen zur Bootstrap-Zeit
  • Unterstützung für XML-basierte Entitätszuordnung
  • JavaConfig-basierte Repository-Konfiguration durch Einführung @EnableJpaRepositories

    Geben Sie hier die Bildbeschreibung ein
Shreyos Adikari
quelle
3

JPA

JPA ist eine Spezifikation, die die Art und Weise standardisiert, wie Java-Objekte einem relationalen Datenbanksystem zugeordnet werden. JPA ist nur eine Spezifikation und besteht aus einer Reihe von Schnittstellen wie EntityManagerFactoryund EntityManagerund Anmerkungen, mit denen Sie ein Java-Entitätsobjekt einer Datenbanktabelle zuordnen können.

Es gibt mehrere JPA-Anbieter wie HIbernate, EclipseLink oder Open JPA, die Sie verwenden können.

Federdaten JPA

Spring Data JPA ist eine JPA-Datenzugriffsabstraktion. Genau wie JPA kann Spring Data JPA ohne einen JPA-Anbieter nicht funktionieren.

Spring Data JPA bietet eine Lösung für das DDD- RepositoryMuster oder das DAO (Data Acess Object) pattern. Es kann auch JPA-Abfragen in Ihrem Namen durch Methodennamenkonventionen generieren.

Spring Data JPA kann mit Hibernate, Eclipse Link oder jedem anderen JPA-Anbieter zusammenarbeiten. Ein sehr interessanter Vorteil der Verwendung von Spring oder Java EE besteht darin, dass Sie Transaktionsgrenzen mithilfe der @TransactionalAnnotation deklarativ steuern können .

Vlad Mihalcea
quelle