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 eine bessere Leistung erbringen als Hibernate / Spring Data JPA?
207
Antworten:
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 das DDD-
Repository
Muster oder die älterenGenericDao
benutzerdefinierten Implementierungen. Es kann auch JPA-Abfragen in Ihrem Namen durch Methodennamenkonventionen generieren.Mit Spring Data können Sie Hibernate, Eclipse Link oder einen anderen JPA-Anbieter verwenden. Ein sehr interessanter Vorteil der Verwendung von Spring oder Java EE besteht darin, dass Sie Transaktionsgrenzen mithilfe der
@Transactional
Annotation deklarativ steuern können .Spring JDBC ist viel leichter und für native Abfragen gedacht. Wenn Sie JDBC nur alleine verwenden möchten, ist es besser, Spring JDBC zu verwenden, um mit der JDBC-Ausführlichkeit umzugehen.
Daher ergänzen sich Hibernate- und Spring-Daten eher als Konkurrenten.
quelle
Es gibt 3 verschiedene Dinge, die wir hier verwenden:
Lassen Sie uns also verstehen, wie die Federdaten jpa und spring + hibernate funktionieren.
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 im Ruhezustand einen Rohbetrieb schreiben. Angenommen, Sie schreiben eine Dao-Klasse für die Employee-Klasse. Morgen müssen Sie in Ihrer Anwendung möglicherweise eine ähnliche Rohoperation für eine andere Entität schreiben. Es gibt also viel Code für das Boilerplate, den wir hier sehen können.
Mit Spring Data JPA können wir jetzt Dao-Schnittstellen definieren, indem wir die Repositorys (Crudrepository, Jparepository) erweitern, sodass Sie zur Laufzeit eine Dao-Implementierung erhalten. Sie müssen keine Dao-Implementierung mehr schreiben. So erleichtert Spring Data JPA Ihr Leben.
quelle
Ich bin anderer Meinung, SpringJPA macht das Leben einfach. Ja, es bietet einige Klassen und Sie können schnell ein einfaches DAO erstellen, aber tatsächlich ist es alles, was Sie tun können. Wenn Sie mehr als findById () tun oder speichern möchten, müssen Sie durch die Hölle gehen:
Warum ist das eigene Transaktionsmanagement ein Nachteil? Da Java 1.8 Standardmethoden für Schnittstellen zulässt, funktionieren auf Spring Annotation basierende Transaktionen einfach nicht.
Leider basiert SpringJPA auf Überlegungen, und manchmal müssen Sie einen Methodennamen oder ein Entitätspaket in Anmerkungen (!) Verweisen. Das ist der Grund, warum jedes Refactoring einen großen Absturz verursacht. Leider funktioniert @Transactional nur für den primären DS :( Wenn Sie also mehr als eine DataSources haben, denken Sie daran - Transaktionen funktionieren nur für den primären DS :)
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
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 viel bei Ihren Aufgaben helfen :)
quelle
Spring Data
ist eine Convenience-BibliothekJPA
, die darüber hinaus viele Dinge abstrahiert und Spring Magic (ob es Ihnen gefällt oder nicht) in den Persistence Store-Zugriff bringt. Es wird hauptsächlich für die Arbeit mit relationalen Datenbanken verwendet. Kurz gesagt, Sie können SchnittstellenfindByNameOrderByAge(String name);
mit solchen Methoden deklarieren, die zur Laufzeit analysiert und in entsprechendeJPA
Abfragen konvertiert werden.Seine Platzierung auf
JPA
macht seine Verwendung verlockend für:Rookie-Entwickler, die es nicht
SQL
oder nur schlecht kennen. Dies ist ein Rezept für eine Katastrophe, aber sie können damit durchkommen, wenn das Projekt trivial ist.Erfahrene Ingenieure, die wissen, was sie tun und die Dinge schnell auf den Kopf stellen wollen. Dies könnte eine praktikable Strategie sein (aber lesen Sie weiter).
Aus meiner Erfahrung mit
Spring Data
ist seine Magie zu viel (dies giltSpring
im Allgemeinen). Ich fing an, es in einem Projekt stark zu nutzen, und traf schließlich mehrere Eckfälle, in denen ich die Bibliothek nicht aus dem Weg räumen konnte, und endete mit hässlichen Problemumgehungen. Später las ich die Beschwerden anderer Benutzer und stellte fest, dass diese Probleme typisch für sindSpring Data
. Überprüfen Sie beispielsweise dieses Problem, das zu stundenlangen Ermittlungen / Fluchen führte:Am Ende ging ich auf ein niedrigeres Level und fing an zu benutzen
JDBI
- eine nette Bibliothek mit gerade genug "Magie", um dich vor dem Boilerplate zu retten. Damit haben Sie die vollständige Kontrolle über SQL-Abfragen und müssen fast nie gegen die Bibliothek kämpfen.quelle
Hibernate ist die 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.
quelle
Wenn Sie Einfachheit und mehr Kontrolle bei SQL-Abfragen bevorzugen, würde ich Spring Data / Spring JDBC empfehlen.
Es ist eine gute Lernkurve in JPA und manchmal schwierig zu debuggen. Auf der anderen Seite ist es viel einfacher, die Abfrage zu optimieren und die Leistung zu verbessern, obwohl Sie die volle Kontrolle über SQL haben. Sie können Ihr SQL problemlos mit DBA oder jemandem teilen, der die Datenbank besser versteht.
quelle