Was ist der Unterschied zwischen Hibernate und Spring Data JPA

Lesezeit: 8 Minuten

Benutzeravatar des Hardcoders
harter Coder

Was sind die Hauptunterschiede zwischen Hibernate und Spring Data JPA?

Wann sollten wir Hibernate oder Spring Data JPA nicht verwenden?

Wann kann die Spring JDBC-Vorlage besser abschneiden als Hibernate und Spring Data JPA?

  • @NeilStockton, der nach einem Vergleich zwischen zwei Technologien fragt, fragt nicht nach Meinungen.

    – Philipp Rego

    16. Februar 2018 um 6:03 Uhr

Benutzeravatar von Vlad Mihalcea
Vlad Mihalcea

Hibernate ist eine JPA-Implementierung, während Spring Data JPA eine JPA-Datenzugriffsabstraktion ist. Spring Data JPA kann ohne einen JPA-Anbieter nicht funktionieren.

Spring Data bietet eine Lösung für die DDD Repository Muster oder das Erbe GenericDao benutzerdefinierte Implementierungen. Es kann auch JPA-Abfragen in Ihrem Namen durch Methodennamenskonventionen generieren.

Mit Spring Data können Sie Hibernate, EclipseLink oder jeden anderen JPA-Anbieter verwenden. Ein sehr interessanter Vorteil der Verwendung von Spring oder Java EE besteht darin, dass Sie Transaktionsgrenzen deklarativ mit der steuern können @Transactional Anmerkung.

Spring JDBC ist viel leichter und für native Abfragen gedacht. Wenn Sie nur JDBC allein verwenden möchten, sollten Sie besser Spring JDBC verwenden, um mit der JDBC-Ausführlichkeit umzugehen.

Daher sind Hibernate und Spring Data eher komplementär als Konkurrenten.

  • Bedeutet dies also, dass Spring Data JPA nicht aus sich selbst heraus existieren kann? Das heißt, unter der Haube verwendet es einen der JPA-Anbieter (wie Hibernate, Eclipselink oder einen anderen JPA-Anbieter)?

    – Neugieriger Geist

    3. Mai 2016 um 19:17 Uhr

  • Ich meine, wenn ich nur den Ruhezustand verwende, gibt es wenig Konfiguration für den Ruhezustand. Wenn ich spring data jpa verwende, sieht das viel einfacher aus als der Ruhezustand. In diesem Sinne habe ich Ihnen diese Frage gestellt.

    – Asif Mushtaq

    14. Oktober 2018 um 10:56 Uhr

  • Genauer gesagt, bisher funktioniert alles einwandfrei, Sie müssen nur die oberste Ebene verstehen, dh Spring Data JPA. Mit der ersten Ausnahme müssen Sie möglicherweise die unteren Ebenen kennen, dh Hibernate, JDBC und die Datenbank.

    – Marmite-Bomber

    13. August 2019 um 16:26 Uhr

  • @CuriousMind Nein, Spring Data existiert (funktioniert) nicht unabhängig. Es verwendet standardmäßig die Hibernate-Implementierung, wie Sie sehen können hibernate-core als eines der Kinder eintaucht spring-data-jpa

    – CᴴᴀZ

    21. Juni 2021 um 7:32 Uhr

  • Im Allgemeinen ist die Trennung von Implementierung und API ein gutes Design. In diesem Fall implementiert Spring Data die Idee des Repositorys als API. Diese API basiert vollständig auf dem Repository-Muster und ist von nichts anderem abhängig. Hibernate, Eclipse Link oder andere Bibliotheken bieten eine Implementierung für die Spring Data API. Aus Sicht der Entwickler: Für die Kompilierungsphase werden Federdaten benötigt, für die Laufzeitphase wird der Ruhezustand benötigt.

    – Chi Cuong Le

    8. Mai um 9:07 Uhr

Benutzeravatar von Bhagwati Malav
Bhagwati Malav

Es gibt 3 verschiedene Dinge, die wir hier verwenden:

  1. JPA: Java-Persistenz-API, die Spezifikationen für das Persistieren, Lesen und Verwalten von Daten aus Ihrem Java-Objekt für Beziehungen in der Datenbank bereitstellt.
  2. Hibernate: Es gibt verschiedene Anbieter, die jpa implementieren. Hibernate ist einer von ihnen. Wir haben also auch andere Anbieter. Wenn Sie jedoch jpa mit Spring verwenden, können Sie in Zukunft zu verschiedenen Anbietern wechseln.
  3. Spring Data JPA: Dies ist eine weitere Schicht über JPA, die Spring bereitstellt, um Ihnen das Leben zu erleichtern.

Also lasst uns verstehen, wie spring data jpa und spring + hibernate funktioniert-


Spring Data JPA:

Angenommen, Sie verwenden Spring + Hibernate für Ihre Anwendung. Jetzt benötigen Sie eine Dao-Schnittstelle und -Implementierung, in der Sie mit SessionFactory von Hibernate Crud-Operationen schreiben. Angenommen, Sie schreiben eine Dao-Klasse für die Employee-Klasse. Morgen müssen Sie in Ihrer Anwendung möglicherweise eine ähnliche Crud-Operation für eine andere Entität schreiben. Es gibt also eine Menge Boilerplate-Code, den wir hier sehen können.

Jetzt können wir mit Spring Data JPA Dao-Schnittstellen definieren, indem wir seine Repositories (Crudrepository, Jparepository) erweitern, sodass Sie zur Laufzeit eine Dao-Implementierung erhalten. Sie müssen keine dao-Implementierung mehr schreiben. So macht spring data jpa Ihr Leben einfacher.

  • Was ist also die zugrunde liegende Spring Data JPA-Implementierung, ist sie im Ruhezustand? Denn wenn ich PagingAndSortingRepository verwende, werden Hibernate-Protokolle in der Konsole angezeigt.

    – Viki

    31. Dezember 2018 um 4:28 Uhr

  • Spring Data JPA verwendete standardmäßig die Hibernate-Implementierung. Wenn Sie die transitiven Abhängigkeiten von spring-boot-starter-data-jpa sehen, können Sie dort hibernate-core sehen

    – Ich bin VickyAV

    18. Oktober 2019 um 6:35 Uhr

Benutzeravatar von Klaudiusz Wojtkowiak
Klaudiusz Wojtkowiak

Ich stimme nicht zu, dass SpringJPA das Leben einfach macht. Ja, es bietet einige Klassen und Sie können schnell ein einfaches DAO erstellen, aber eigentlich ist es alles, was Sie tun können. Wer mehr machen will als findById() oder save, muss durch die Hölle gehen:

  • kein EntityManager-Zugriff in org.springframework.data.repository-Klassen (dies ist eine grundlegende JPA-Klasse!)
  • Eigene Transaktionsverwaltung (Ruhe-Transaktionen nicht erlaubt)
  • große Probleme mit mehr als einer Datenquellenkonfiguration
  • kein Datenquellen-Pooling (HikariCP muss als Drittanbieter-Bibliothek verwendet werden)

Warum ist ein eigenes Transaktionsmanagement ein Nachteil? Da Java 1.8 Standardmethoden in Schnittstellen zulässt, funktionieren auf Spring-Annotationen basierende Transaktionen einfach nicht.

Leider basiert SpringJPA auf Reflexionen, und manchmal müssen Sie einen Methodennamen oder ein Entitätspaket in Anmerkungen (!) verweisen. Deshalb macht jede Umgestaltung einen großen Absturz. Leider funktioniert @Transactional nur für den primären DS 🙁 Wenn Sie also mehr als eine Datenquelle haben, denken Sie daran – Transaktionen funktionieren nur für den primären DS 🙂

Was sind die Hauptunterschiede zwischen Hibernate und Spring Data JPA?

Hibernate ist JPA-kompatibel, SpringJPA Spring-kompatibel. Ihr HibernateJPA DAO kann mit JavaEE oder Hibernate Standalone verwendet werden, wenn SpringJPA beispielsweise in Spring – SpringBoot verwendet werden kann

Wann sollten wir Hibernate oder Spring Data JPA nicht verwenden? Wann kann die Spring JDBC-Vorlage besser abschneiden als Hibernate / Spring Data JPA?

Verwenden Sie Spring JDBC nur, wenn Sie viele Joins verwenden müssen oder wenn Sie Spring mit mehreren Datenquellenverbindungen verwenden müssen. Vermeiden Sie im Allgemeinen JPA für Joins.

Aber mein allgemeiner Rat, verwenden Sie eine frische Lösung – Daobab (http://www.daobab.io). Daobab ist mein Java- und jeder JPA-Engine-Integrator, und ich glaube, es wird Ihnen bei Ihren Aufgaben sehr helfen 🙂

  • Daobab, wirklich? Wenn Sie jpql wie Typsicherheit nicht mögen (ich nicht), hat JPA eine typsichere Kriterien-API … Standard-JPA ist besser als diese schlechte Alternative.

    – Ymajoros

    25. Januar 2019 um 10:31 Uhr


Benutzeravatar von raiks
rächen

Spring Data ist eine Convenience-Bibliothek oben drauf JPA das viele Dinge abstrahiert und Frühlingsmagie (ob man will oder nicht) in den Zugriff auf den Persistenzspeicher bringt. Es wird hauptsächlich für die Arbeit mit relationalen Datenbanken verwendet. Kurz gesagt, es erlaubt Ihnen, Schnittstellen zu deklarieren, die Methoden wie haben findByNameOrderByAge(String name); die zur Laufzeit geparst und in geeignete konvertiert werden JPA Abfragen.

Seine Platzierung auf JPA macht seinen Einsatz verlockend für:

  1. Rookie-Entwickler, die es nicht wissen SQL oder es schlecht kennen. Dies ist ein Rezept für eine Katastrophe, aber sie können damit davonkommen, wenn das Projekt trivial ist.

  2. Erfahrene Ingenieure, die wissen, was sie tun und schnell etwas aufdrehen wollen. Dies könnte eine praktikable Strategie sein (aber lesen Sie weiter).

Aus meiner Erfahrung mit Spring Dataseine Magie ist zu viel (dies gilt für Spring Im Algemeinen). Ich fing an, es intensiv in einem Projekt zu verwenden und stieß schließlich auf mehrere Eckfälle, in denen ich die Bibliothek nicht aus dem Weg räumen konnte und mit hässlichen Problemumgehungen endete. Später las ich die Beschwerden anderer Benutzer und stellte fest, dass diese Probleme typisch für sind Spring Data. Überprüfen Sie zum Beispiel dieses Problem, das zu stundenlangen Nachforschungen/Fluchen geführt hat:

 public TourAccommodationRate createTourAccommodationRate(
        @RequestBody TourAccommodationRate tourAccommodationRate
    ) {
        if (tourAccommodationRate.getId() != null) {
            throw new BadRequestException("id MUST NOT be specified in a body during entry creation");
        }

        // This is an ugly hack required for the Room slim model to work. The problem stems from the fact that
        // when we send a child entity having the many-to-many (M:N) relation to the containing entity, its
        // information is not fetched. As a result, we get NPEs when trying to access all but its Id in the
        // code creating the corresponding slim model. By detaching the entity from the persistence context we
        // force the ORM to re-fetch it from the database instead of taking it from the cache

        tourAccommodationRateRepository.save(tourAccommodationRate);
        entityManager.detach(tourAccommodationRate);
        return tourAccommodationRateRepository.findOne(tourAccommodationRate.getId());
    }

Am Ende ging ich auf ein niedrigeres Niveau und fing an zu konsumieren JDBI – eine schöne Bibliothek mit gerade genug “Magie”, um Sie vor der Boilerplate zu retten. Damit haben Sie die vollständige Kontrolle über SQL-Abfragen und müssen fast nie gegen die Bibliothek kämpfen.

Benutzeravatar von GPopat
GPopat

Wenn Sie Einfachheit und mehr Kontrolle über SQL-Abfragen bevorzugen, würde ich vorschlagen, Spring Data / Spring JDBC zu verwenden.

Seine gute Lernkurve in JPA und manchmal schwierig zu debuggende Probleme. Auf der anderen Seite haben Sie zwar die volle Kontrolle über SQL, aber es wird viel einfacher, Abfragen zu optimieren und die Leistung zu verbessern. Sie können Ihr SQL problemlos mit DBA oder jemandem teilen, der sich mit Datenbanken besser auskennt.

Benutzeravatar von Muhammad Waqas Dilawar
Muhammad Waqas Dilawar

Hibernate ist eine Implementierung von “JPA”, einer Spezifikation für Java-Objekte in der Datenbank.

Ich würde empfehlen, wrt JPA zu verwenden, da Sie zwischen verschiedenen ORMS wechseln können.

Wenn Sie JDBC verwenden, müssen Sie SQL-Abfragen verwenden. Wenn Sie sich also mit SQL auskennen, entscheiden Sie sich für JDBC.

1433660cookie-checkWas ist der Unterschied zwischen Hibernate und Spring Data JPA

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy