Qual è la differenza tra JPA e Spring Data JPA?


144

Sono un po 'confuso riguardo alla differenza tra Spring Data-JPA e JPA. So di JPA che si tratta di una specifica per il persistere degli oggetti Java in un database relazionale utilizzando la popolare tecnologia ORM.

In altre parole, JPA fornisce interfacce e altre tecnologie ORM, implementa quelle interfacce note come provider JPA, ad esempio Hibernate.

Ora, cos'è esattamente l'APP Spring Data?

Spring Data JPA ha aggiunto alcune funzionalità (interfacce) su JPA e ancora è specificato solo o è anche un provider JPA?

Ho visto Spring Data JPA lavorare attorno ai repository (livello DAO: se non sbaglio). Quindi, voglio dire, come è diverso usando 'Spring Data JPA + Hibernate' o usando solo la regia 'Hibernate'?

Risposte:


126

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.


1
Posso chiamare Repository una raccolta di entità gestite da Spring? Non so perché, ma il supporto di Spring JPA utilizzando i repository sembra molto simile a EntityManager di EJB: è questo il pensiero giusto o sono completamente diversi nel loro scopo? Grazie in anticipo. Mustafa.
Mustafa,

1
@Mustafa La maggior parte delle soluzioni ha motivi comuni. L'obiettivo potrebbe essere lo stesso, l'implementazione è diversa a causa delle interfacce coinvolte.
Fritz,

35

L'API Java Persistence, a volte indicata come JPA, è un framework Java che gestisce i dati relazionali in applicazioni che utilizzano Java Platform, Standard Edition (JavaSE) e Java Platform, Enterprise Edition (JavaEE).

La persistenza in questo contesto copre tre aree:

  • L'API stessa, definita nel javax.persistencepacchetto.

  • Java Persistence Query Language (JPQL).

  • Metadati oggetto-relazionali.

    inserisci qui la descrizione dell'immagine

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

Caratteristiche:

  • Supporto sofisticato per creare repository basati su Spring e JPA
  • Supporto per predicati QueryDSL e quindi query JPA di tipo sicuro
  • Controllo trasparente della classe di dominio
  • Supporto impaginazione, esecuzione dinamica delle query, capacità di integrare il codice di accesso ai dati personalizzato
  • Convalida di @Queryquery annotate al momento del bootstrap
  • Supporto per la mappatura di entità basata su XML
  • Introduzione alla configurazione del repository basata su JavaConfig @EnableJpaRepositories

    inserisci qui la descrizione dell'immagine

3

JPA

JPA è una specifica che standardizza il modo in cui gli oggetti Java sono mappati su un sistema di database relazionale. Essendo solo una specifica, JPA è costituito da un insieme di interfacce, come EntityManagerFactory, EntityManagere annotazioni che ti aiutano a mappare un oggetto entità Java per una tabella di database.

Esistono diversi provider JPA, come HIbernate, EclipseLink o Open JPA che è possibile utilizzare.

Spring Data JPA

Spring Data JPA è un'astrazione di accesso ai dati JPA. Proprio come JPA, Spring Data JPA non può funzionare senza un provider JPA.

Spring Data JPA offre una soluzione al modello DDDRepository o al DAO (Data Acess Object) pattern. Può anche generare query JPA per tuo conto attraverso le convenzioni sui nomi dei metodi.

Spring Data JPA può funzionare con Hibernate, Eclipse Link o qualsiasi altro provider JPA. Un vantaggio molto interessante dell'uso di Spring o Java EE è che puoi controllare i limiti delle transazioni in modo dichiarativo usando l' @Transactionalannotazione .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.