java - simple - spring data rest




Spring Data-JPA contro JPA: qual è la differenza? (2)

Sono un po 'confuso sulla differenza tra Spring Data-JPA e JPA. So di JPA che si tratta di una specifica per la permanenza degli oggetti Java in un database relazionale che utilizza la tecnologia ORM popolare. In altre parole, JPA fornisce interfacce e altre tecnologie ORM, implementa quelle interfacce conosciute come provider JPA, ad esempio Hibernate.

Ora, cos'è esattamente Spring Data JPA. Spring Data JPA ha aggiunto alcune funzionalità in più (interfacce) su JPA e viene ancora specificato o è anche un fornitore JPA?

Ho visto Spring Data JPA lavorare su repository (livello DAO: se non sbaglio). Quindi intendo come è diverso usando 'Spring Data JPA + Hibernate' o usando solo la direzione 'Hibernate'?


L'API Java Persistence, a volte indicata come JPA, è una struttura Java che gestisce i dati relazionali nelle applicazioni che utilizzano la piattaforma Java, la versione standard (JavaSE) e la piattaforma Java, Enterprise Edition (JavaEE).

La persistenza in questo contesto copre tre aree:

  • L'API stessa, definita nel pacchetto javax.persistence .

  • Java Persistence Query Language (JPQL).

  • Oggetto: metadati relazionali.

Spring Data JPA fa parte del progetto Spring Data che semplifica l'implementazione di repository basati su JPA.

Caratteristiche:

  • Supporto sofisticato per creare repository basati su Spring e JPA
  • Supporto per i predicati QueryDSL e quindi query JPA sicure per tipo
  • Controllo trasparente della classe di dominio
  • Supporto dell'impaginazione, esecuzione dinamica di query, possibilità di integrare il codice di accesso ai dati personalizzato
  • Convalida delle query con annotazione @Query in fase di bootstrap
  • Supporto per il mapping di entità basato su XML
  • Configurazione del repository basata su JavaConfig mediante l'introduzione di @EnableJpaRepositories


Ho visto Spring, JPA funziona su 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 è una particolare implementazione di quella specifica (queste implementazioni sono solitamente definite 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 di Spring Data JPA :

Implementare un livello di accesso ai dati di un'applicazione è stato complicato per un po 'di tempo. Doveva essere scritto troppo codice di codice. Le classi di dominio erano anemiche e non sono state progettate in modo reale orientato agli oggetti o al dominio.

L'utilizzo di entrambe queste tecnologie rende la vita degli sviluppatori molto più semplice per quanto riguarda la persistenza del modello di dominio ricco. Tuttavia, la quantità di codice boilerplate per implementare i repository, in particolare, è ancora piuttosto elevata. Pertanto, l'obiettivo dell'archiviazione del repository di Spring Data è ridurre lo sforzo di implementare in modo significativo i livelli di accesso ai dati per vari archivi di persistenza.

Per riassumere, è sopra JPA che aggiunge un altro livello di astrazione, un tipo di definizione di un progetto basato su standard per supportare il livello di persistenza in un contesto di primavera. Quelle 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ò analizzare il progetto e trovarlo:

<repositories base-package="com.acme.repositories" />

Quindi, permettendoti di usarlo nel contesto di un contenitore o al di fuori di esso.

Ora, cos'è esattamente la primavera, JPA. Spring è, JPA ha aggiunto alcune funzionalità in più (interfacce) su JPA e ancora è specificato solo o è anche un provider JPA?

Spring Data JPA fornisce una definizione per implementare i repository supportati sotto il cofano facendo riferimento alle specifiche JPA, utilizzando il provider definito dall'utente.





jpa-2.0