¿Cuál es la diferencia entre JPA y Spring Data JPA?

144

Estoy un poco confundido acerca de la diferencia entre Spring Data-JPA y JPA. Sé sobre JPA que es una especificación para persistir los objetos Java en una base de datos relacional utilizando la tecnología ORM popular.

En otras palabras, JPA proporciona interfaces y otras tecnologías ORM, implementa esas interfaces conocidas como proveedor JPA, por ejemplo, Hibernate.

Ahora, ¿qué es exactamente Spring Data JPA?

¿Spring Data JPA ha agregado más funcionalidades (Interfaces) sobre JPA y todavía se especifica solo o también es un proveedor de JPA?

Vi que Spring Data JPA funciona alrededor de repositorios (capa DAO: si no me equivoco). Entonces, quiero decir, ¿cómo es diferente usar 'Spring Data JPA + Hibernate' o solo usar la dirección 'Hibernate'?

DHRUV BANSAL
fuente

Respuestas:

126

Vi Spring, JPA funciona alrededor de repositorios (capa DAO: si no me equivoco). Entonces, ¿cómo es diferente usar 'Spring JPA + Hibernate' o solo usar 'Hibernate' directamente?

Como dijiste, JPA es una especificación, mientras que Hibernate es una implementación particular de esa especificación (estas implementaciones generalmente se denominan proveedores ). Al usar Hibernate, se vincula a ese proveedor restringiendo su libertad de cambiar a otra opción cuando sea necesario (por ejemplo, desea usar EclipseLink u ObjectDB porque Hibernate tiene un error que detiene su proceso de desarrollo).

Citando la primavera de datos JPA 's documentación:

Implementar una capa de acceso a datos de una aplicación ha sido engorroso durante bastante tiempo. Se tuvo que escribir demasiado código repetitivo. Las clases de dominio eran anémicas y no se han diseñado de manera orientada a objetos reales o de dominio.

El uso de ambas tecnologías hace que la vida de los desarrolladores sea mucho más fácil con respecto a la persistencia del modelo de dominio rico. Sin embargo, la cantidad de código repetitivo para implementar repositorios, especialmente, sigue siendo bastante alta. Por lo tanto, el objetivo de la abstracción del repositorio de Spring Data es reducir significativamente el esfuerzo para implementar capas de acceso a datos para varios almacenes de persistencia.

Para resumir, está encima de JPA agregando otra capa de abstracción, que define un diseño basado en estándares para admitir la capa de persistencia en un contexto de Spring. Esas interfaces definidas (conocidas por Spring) proporcionan los servicios que maneja el marco utilizando JPA para servir los resultados. Usted define un repositorio de manera que Spring pueda escanear el proyecto y encontrarlo:

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

Por lo tanto, le permite usarlo en el contexto de un contenedor o fuera de él.

Ahora, ¿qué es exactamente Spring, JPA? ¿Spring, JPA ha agregado algunas funcionalidades más (Interfaces) sobre JPA y todavía se especifica solo o también es un proveedor de JPA?

Spring Data JPA proporciona una definición para implementar repositorios que son compatibles bajo el capó haciendo referencia a la especificación JPA, utilizando el proveedor que defina.

Fritz
fuente
1
¿Puedo llamar al Repositorio una colección de entidades que administra Spring? No sé por qué, pero el soporte de Spring JPA usando repositorios parece muy similar al EntityManager de EJB: ¿es ese el pensamiento correcto o son completamente diferentes en su propósito? Gracias por adelantado. Mustafa
Mustafa
1
@Mustafa La mayoría de las soluciones tienen puntos en común. Aunque el objetivo sea el mismo, la implementación es diferente debido a las interfaces involucradas.
Fritz
35

La API de persistencia de Java, a veces denominada JPA, es un marco de Java que gestiona datos relacionales en aplicaciones que utilizan la Plataforma Java, Edición estándar (JavaSE) y la Plataforma Java, Edición empresarial (JavaEE).

La persistencia en este contexto cubre tres áreas:

  • La API en sí, definida en el javax.persistencepaquete.

  • El lenguaje de consulta de persistencia de Java (JPQL).

  • Metadatos relacionales de objetos.

    ingrese la descripción de la imagen aquí

Spring Data JPA es parte del proyecto general Spring Data que facilita la implementación de repositorios basados ​​en JPA.

caracteristicas:

  • Soporte sofisticado para construir repositorios basados ​​en Spring y JPA
  • Soporte para predicados QueryDSL y, por lo tanto, consultas JPA de tipo seguro
  • Auditoría transparente de la clase de dominio.
  • Soporte de paginación, ejecución dinámica de consultas, capacidad de integrar código de acceso a datos personalizado
  • Validación de @Queryconsultas anotadas en tiempo de arranque
  • Soporte para mapeo de entidades basado en XML
  • Configuración del repositorio basado en JavaConfig mediante la introducción de @EnableJpaRepositories

    ingrese la descripción de la imagen aquí
Shreyos Adikari
fuente
3

JPA

JPA es una especificación que estandariza la forma en que los objetos Java se asignan a un sistema de base de datos relacional. Siendo sólo una especificación, la APP se compone de un conjunto de interfaces, como EntityManagerFactory, EntityManagery anotaciones que ayudarle a trazar una entidad objeto de Java a una tabla de base de datos.

Existen varios proveedores de JPA, como HIbernate, EclipseLink o Open JPA, que puede usar.

Spring Data JPA

Spring Data JPA es una abstracción de acceso a datos JPA. Al igual que JPA, Spring Data JPA no puede funcionar sin un proveedor de JPA.

Spring Data JPA ofrece una solución para el patrón DDDRepository o el DAO (Data Acess Object) pattern. También puede generar consultas JPA en su nombre a través de convenciones de nombres de métodos.

Spring Data JPA puede funcionar con Hibernate, Eclipse Link o cualquier otro proveedor de JPA. Una ventaja muy interesante de usar Spring o Java EE es que puede controlar los límites de transacción declarativamente usando la @Transactionalanotación .

Vlad Mihalcea
fuente