java - mkyong - spring query example
Spring Data-JPA versus JPA: ¿Cuál es la diferencia? (3)
Estoy un poco confundido acerca de la diferencia entre Spring Data-JPA y JPA. Sé acerca de JPA que es una especificación para persistir en los objetos Java a una base de datos relacional utilizando la popular tecnología ORM, es decir, 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 algunas funcionalidades más (Interfaces) sobre JPA y todavía está especificado solo o también es un proveedor de JPA?
Vi Spring Data JPA funciona en repositorios (capa DAO: si no estoy equivocado). Entonces, me refiero a cómo es diferente usar ''Spring Data JPA + Hibernate'' o solo usar la dirección ''Hibernate''.
La API Java Persistence, a veces denominada JPA, es un framework Java que gestiona datos relacionales en aplicaciones que utilizan Java Platform, Standard Edition (JavaSE) y Java Platform, Enterprise Edition (JavaEE).
La persistencia en este contexto cubre tres áreas:
La API en sí, definida en el paquete
javax.persistence
.Java Persistence Query Language (JPQL).
Spring Data JPA es parte del proyecto paraguas de Spring Data que facilita la implementación de repositorios basados en JPA.
caracteristicas:
- Soporte sofisticado para construir repositorios basados en Spring y JPA
- Compatibilidad con los predicados QueryDSL y, por lo tanto, las 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 consultas anotadas de
@Query
en tiempo de arranque - Soporte para mapeo de entidades basado en XML
- Configuración de repositorio basada en
@EnableJpaRepositories
introduciendo@EnableJpaRepositories
Vi Spring, JPA trabaja en repositorios (capa DAO: si no estoy equivocado). Entonces me refiero a cómo es diferente usar ''Spring JPA + Hibernate'' o solo usar ''Hibernate'' directamente?
Como usted dijo, JPA es una especificación, mientras que Hibernate es una implementación particular de esa especificación (estas implementaciones generalmente se conocen como Proveedores ). Al usar Hibernate, usted se vincula con ese proveedor, restringiendo su libertad de cambiar a otra opción cuando sea necesario (por ejemplo, si desea usar EclipseLink u ObjectDB en su lugar porque Hibernate tiene un error que detiene su proceso de desarrollo).
Citando la documentación de Spring Data JPA :
Implementar una capa de acceso a datos de una aplicación ha sido engorroso durante bastante tiempo. Demasiado código repetitivo tuvo que ser escrito. Las clases de dominio eran anémicas y no se habían diseñado de manera orientada a objetos o impulsada por el dominio.
El uso de estas dos tecnologías hace que la vida de los desarrolladores sea mucho más fácil con respecto a la persistencia del modelo de dominio enriquecido. Sin embargo, la cantidad de código repetitivo para implementar repositorios, especialmente todavía es bastante alto. Por lo tanto, el objetivo de la abstracción del repositorio de Spring Data es reducir significativamente el esfuerzo por implementar capas de acceso a datos para varias tiendas de persistencia.
Para resumir, está encima de JPA agregando otra capa de abstracción, tipo de definición de un diseño basado en estándares para soportar Persistence Layer en un contexto Spring. Esas interfaces definidas (conocidas por Spring) proporcionan los servicios que maneja el framework utilizando JPA para servir los resultados. Define un repositorio de forma 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 que 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ó al hacer referencia a la especificación JPA, utilizando el proveedor que usted defina.
JPA es la API Java Persistence, que es la API estándar de Java para el mapeo relacional de objetos.
JPA es solo una especificación; necesita una implementación de la misma para poder usarla. Hibernate es una de las implementaciones más conocidas y más utilizadas de JPA, pero hay otras, como EclipseLink JPA.
Spring Framework es un marco amplio para ayudarlo a escribir software de nivel empresarial más fácil. Contiene soporte para muchas tecnologías Java, incluida JPA.
Spring Framework consiste en una colección de proyectos, y uno de estos es Spring Data.
El objetivo de Spring Data es facilitar el trabajo con diferentes tipos de bases de datos, desde bases de datos relacionales tradicionales hasta bases de datos NoSQL. Spring Data es compatible con JPA a través del subproyecto Spring Data JPA.
Para escribir un programa que utiliza JPA, necesita al menos una implementación de JPA, como Hibernate.
Si está utilizando Spring Framework para su aplicación, lo más probable es que desee utilizar Spring Data JPA junto con Hibernate.
Este enlace debería ser útil para comprender mejor el concepto:
https://spring.io/blog/2011/02/10/getting-started-with-spring-data-jpa/