Ho visto Spring, JPA lavora attorno ai repository (livello DAO: se non sbaglio). Quindi intendo come è diverso usando 'Spring JPA + Hibernate' o usando solo 'Hibernate' direttamente?
Come hai detto, JPA è una specifica mentre Hibernate è un'implementazione particolare di quella specifica (queste implementazioni sono generalmente indicate come Provider ). Usando Hibernate ti leghi a quel provider limitando la tua libertà di passare a un'altra opzione quando richiesto (ad esempio, vuoi usare EclipseLink o ObjectDB invece perché Hibernate ha un bug che interrompe il tuo processo di sviluppo).
Citando la documentazione dell'APP di Spring Data :
L'implementazione di un livello di accesso ai dati di un'applicazione è stata complicata per un bel po '. È stato necessario scrivere troppo codice del boilerplate. Le classi di dominio erano anemiche e non sono state progettate in modo orientato agli oggetti reali o guidate dal dominio.
L'uso di entrambe queste tecnologie semplifica notevolmente la vita degli sviluppatori per quanto riguarda la persistenza del modello di dominio avanzato. Tuttavia, la quantità di codice del boilerplate per implementare i repository, in particolare, è ancora piuttosto elevata. Pertanto, l'obiettivo dell'astrazione del repository di Spring Data è quello di ridurre significativamente gli sforzi per implementare in modo significativo i livelli di accesso ai dati per vari archivi di persistenza.
Per riassumere, è in cima all'APP l'aggiunta di un altro livello di astrazione, un po 'come definire un design basato su standard per supportare il livello di persistenza in un contesto di primavera. Queste interfacce definite (note a Spring) forniscono i servizi che il framework gestisce usando JPA per servire i risultati. Definisci un repository in un modo in cui Spring può scansionare il progetto e trovarlo:
<repositories base-package="com.acme.repositories" />
Pertanto, consentendoti di utilizzarlo nel contesto di un contenitore o al di fuori di esso.
Ora, cos'è esattamente Spring, JPA. Spring, JPA ha aggiunto alcune funzionalità in più (interfacce) su JPA e ancora è solo specificato o è anche un provider JPA?
Spring Data JPA fornisce una definizione per implementare repository che sono supportati sotto il cofano facendo riferimento alla specifica JPA, utilizzando il provider definito.