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.
La persistencia en este contexto cubre tres áreas:
La API en sí, definida en el
javax.persistence
paquete.El lenguaje de consulta de persistencia de Java (JPQL).
Metadatos relacionales de objetos.
caracteristicas:
@Query
consultas anotadas en tiempo de arranque@EnableJpaRepositories
fuente
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
,EntityManager
y 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 DDD
Repository
o elDAO (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
@Transactional
anotación .fuente