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.