wake-up-neo.com

Was ist der Unterschied zwischen Hibernate und Spring Data JPA?

Was sind die Hauptunterschiede zwischen Hibernate und Spring Data JPA? Wann sollten wir Hibernate oder Spring Data JPA nicht verwenden? Wann kann die Leistung einer Spring-JDBC-Vorlage besser sein als die von Hibernate/Spring Data JPA?

167
hard coder

Hibernate ist eine JPA-Implementierung, während Spring Data JPA eine JPA-Datenzugriffsabstraktion ist. Spring Data bietet eine Lösung für GenericDao benutzerdefinierte Implementierungen. Es kann auch JPA-Abfragen in Ihrem Namen mithilfe von Methodennamenskonventionen generieren.

Mit Spring Data können Sie den Ruhezustand, Eclipse Link oder einen anderen JPA-Anbieter verwenden. Ein sehr interessanter Vorteil ist, dass Sie können die Transaktionsgrenzen deklarativ steuern, indem Sie @Transactional Anmerkung .

Spring JDBC ist viel kompakter und für native Abfragen gedacht. Wenn Sie nur JDBC verwenden möchten, sollten Sie Spring JDBC verwenden, um die JDBC-Ausführlichkeit zu bewältigen.

Hibernate und Spring Data ergänzen sich also eher als Konkurrenten.

213
Vlad Mihalcea

Es gibt 3 verschiedene Dinge, die wir hier verwenden:

  1. JPA: Java persistence api, die die Spezifikation zum Speichern, Lesen und Verwalten von Daten von Ihrem Java Objekt zu Relationen in der Datenbank bereitstellen.
  2. Hibernate: Es gibt verschiedene Provider, 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. Frühlingsdaten JPA: Dies ist eine weitere Schicht auf jpa, die Ihnen das Leben erleichtern soll.

Also lasst uns verstehen, wie Frühlingsdaten jpa und Frühling + Ruhezustand funktioniert -


Federdaten JPA:

Angenommen, Sie verwenden spring + hibernate für Ihre Anwendung. Jetzt müssen Sie über eine Dao-Schnittstelle und -Implementierung verfügen, in der Sie eine Crud-Operation mit SessionFactory of Hibernate schreiben. Angenommen, Sie schreiben dao class für Employee class. 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 Code, den wir hier sehen können.

Mit Spring Data JPA können wir nun Dao-Schnittstellen definieren, indem wir die Repositorys (Crudrepository, Jparepository) so erweitern, dass Sie zur Laufzeit eine Dao-Implementierung erhalten. Sie müssen keine Dao-Implementierung mehr schreiben. So macht Ihnen Spring Data JPA das Leben leichter.

104
Bhagwati Malav

Ich bin anderer Meinung SpringJPA macht das Leben einfach. Ja, es gibt einige Klassen und Sie können schnell ein einfaches DAO erstellen, aber in der Tat ist es alles, was Sie tun können. Wenn Sie mehr als findById () oder save tun möchten, müssen Sie durch die Hölle gehen:

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

Warum ist das eigene Transaktionsmanagement ein Nachteil? Da Java 1.8 Standardmethoden in Interfaces zulässt, funktionieren Transaktionen, die auf Spring Annotation basieren, einfach nicht.

Leider basiert SpringJPA auf Überlegungen, und manchmal müssen Sie einen Methodennamen oder ein Entity-Paket in Annotationen (!) Einfügen. Deshalb macht jedes Refactoring einen großen Absturz. Leider funktioniert @Transactional nur für primäre DS= :( Wenn Sie also mehr als eine DataSources haben, denken Sie daran, dass Transaktionen nur für primäre funktionieren :)

Was sind die Hauptunterschiede zwischen Hibernate und Spring Data JPA?

Der Ruhezustand 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 Leistung einer Spring-JDBC-Vorlage besser sein als die von Hibernate/Spring Data JPA?

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

Aber meine allgemeinen Ratschläge, 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 :)

16

Ruhezustand ist die Implementierung von "JPA", einer Spezifikation für Java Objekte in der Datenbank.

Ich würde empfehlen, w.r.t 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.

1
Thoopalliamar

Wenn Sie Einfachheit und mehr Kontrolle über SQL-Abfragen bevorzugen, empfehle ich Spring Data/Spring JDBC.

Es ist eine gute Lernkurve in JPA und manchmal schwierig, Probleme zu debuggen. Auf der anderen Seite ist es viel einfacher, Abfragen zu optimieren und die Leistung zu verbessern, obwohl Sie die vollständige Kontrolle über SQL haben. Sie können Ihr SQL problemlos mit DBA oder mit jemandem teilen, der die Datenbank besser versteht.

0
Gaurang Popat