Es fällt mir schwer zu entscheiden, ob ich für ein neues Projekt bei Hibernate bleiben oder mich mit JPA und der neuen Spring Data-Implementierung nass machen soll.
Ist das Spring Data Framework für große Projekte oder kleine Projekte mit geringen Abfrageanforderungen gedacht?
Ich sehe zwar den Vorteil der Code-Reduzierung durch die Verwendung der @Query
Anmerkung, aber was tun Sie für dynamische Abfragen? Was ist, wenn Sie eine ziemlich komplexe save () -Methode implementieren möchten?
In der Dokumentation wird angegeben, dass eine benutzerdefinierte Schnittstelle und Implementierung erstellt werden soll, die von Ihrem Haupt-Repository implementiert wird. Was ist jedoch, wenn Sie auf Super-Methoden im Crud-Repository selbst zugreifen müssen? Das Crud-Repository implementiert das benutzerdefinierte Repository - nicht umgekehrt. Es scheint ein seltsames Design zu sein.
Ich bin mir nicht sicher, ob dieses Framework den Herausforderungen komplexer und großer Anwendungen gerecht wird. Ich habe noch nie viele Probleme mit Hibernate gehabt, und ich denke darüber nach, bei der guten alten Zuverlässigkeit zu bleiben, anstatt mich für Spring Data JPA zu entscheiden.
Was soll ich machen? Welche unvorhergesehenen Komplikationen und Kosten treten auf, wenn ich mich für Spring Data JPA entscheide?
Antworten:
Also,
spring-data
macht etwas mehr Magie, die bei komplexen Abfragen hilft. Es ist zunächst seltsam und Sie überspringen es vollständig in den Dokumenten, aber es ist wirklich mächtig und nützlich.Dazu müssen Sie ein benutzerdefiniertes
Repository
und ein benutzerdefiniertes RepositoryImpl erstellen und Spring mitteilen, wo es zu finden ist. Hier ist ein Beispiel:Konfigurationsklasse - Zeigen Sie
auf Ihre noch benötigte XML-Konfigurationmit Anmerkungen, die auf Ihr Repositorys-Paket verweisen (es sucht*Impl
jetzt automatisch nach Klassen):jpa-repositories.xml - Geben Sie an,Spring
wo sich Ihre Repositorys befinden. Weisen Sie außerdemSpring
an, nach benutzerdefinierten Repositorys mit demCustomImpl
Dateinamen zu suchen :MyObjectRepository
- Hier können Sie kommentierte und nicht kommentierte Abfragemethoden einfügen. Beachten Sie, wie diese Repository-Schnittstelle dieCustom
eine erweitert:MyObjectRepositoryCustom
- Repository-Methoden, die komplexer sind und nicht mit einer einfachen Abfrage oder Anmerkung behandelt werden können:MyObjectRepositoryCustomImpl
- wo Sie diese Methoden tatsächlich mit einem Autowired implementierenEntityManager
:Erstaunlicherweise kommt dies alles zusammen und Methoden von beiden Schnittstellen (und der von Ihnen implementierten CRUD-Schnittstelle) werden angezeigt, wenn Sie Folgendes tun:
Du wirst sehen:
Es funktioniert wirklich. Und Sie erhalten eine Schnittstelle zum Abfragen.
spring-data
ist wirklich bereit für eine große Anwendung. Und je mehr Abfragen Sie in einfache oder nur Anmerkungen verschieben können, desto besser geht es Ihnen.All dies ist auf der Spring Data Jpa-Website dokumentiert .
Viel Glück.
quelle
JpaRepository
->MyJpaRepository
. Sie müssen auch eine erstellen,MyJpaRepositoryFactoryBean
aber wenn Sie alles richtig eingerichtet haben, können Sie die .save () -Methode überschreiben. Hier sind die Spring Data JPA- Dokumente : static.springsource.org/spring-data/data-jpa/docs/current/… Geben Sie noch nicht auf!Ich habe Spring Data JPA in kleinen und großen Projekten mit einfachen Abfrageanforderungen verwendet. Der Hauptvorteil besteht darin, dass die
@Query
Anmerkung nicht einmal verwendet werden muss . In Spring Data gibt es nichts, was Sie daran hindert, es in großen Projekten zu verwenden, und die jüngsteQueryDSL
Unterstützung könnte Ihnen helfen. Dies ist ein Beispiel für die Verwendung von QueryDSL als Ziel für den Ruhezustand .Wenn Sie komplexe Abfragen vorhersehen und sich mit Hibernate-Objekten ohne JPA wohl fühlen, könnte eine alternative Kombination darin bestehen, die einfachen Spring-Daten
Repository
neben komplexen Hibernate-basierten mit den spezifischen Methoden zu haben, die Sie möglicherweise benötigen. Es ist möglicherweise weniger umständlich, eine Hibernate-Implementierung in eine Spring Data JPA-Struktur zu verwandeln.quelle
Spring JPA bietet Ihnen viel Abstraktion vom Schreiben von SQL und sogar von etwas HQL mithilfe der Deklaration von Abfragemethoden. Spring JPA glänzt mit seiner Abfragegenerierung. Wenn Sie jedoch eine Lösung für den reinen Ruhezustand wünschen, können Sie diese nach Bedarf anpassen, da Spring JPA weiterhin auf dem Ruhezustand basiert. Weitere Informationen finden Sie in den Dokumenten unter http://static.springsource.org/spring-data/data-jpa/docs/current/reference/html .
quelle