Saltar al contenido

Spring Data JDBC / Spring Data JPA vs Hibernate

Solución:

Como dijo @Naros, la pregunta tal como está actualmente en el título realmente no funciona. Parece que realmente deberíamos mirar 4 opciones y en su mayoría enumerar las ventajas de cada enfoque, las desventajas son la ausencia de las ventajas del otro:

JDBC sin Spring Data

Obtienes un control 100% detallado sobre lo que está sucediendo. Un marco no genera ni inyecta nada. Esto puede sonar como una estafa, pero si ha intentado modificar las asignaciones y las configuraciones para obtener alguna implementación de JPA para hacer lo que podría escribir trivialmente en Java y SQL, comprenderá que esto puede ser un gran profesional.

No es necesario que aprenda JPA ni Spring Data. Personalmente, creo que Spring Data es fácil, pero soy parcial (ver mi perfil). Pero JPA es ciertamente un desafío, una vez que abandona el área de las entidades triviales y la configuración.

  • no hay requisitos de cómo modela su modelo de dominio (JPA requiere constructores predeterminados, por ejemplo)

Probablemente desee utilizar alguna biblioteca para reducir el código repetitivo. Echa un vistazo a:

  • JOOQ

  • MyBatis

  • Spring JdbcTemplate (utilizable sin el resto de Spring)

  • QueryDsl

JDBC con Spring Data

Obtiene los beneficios de Spring Data, combinados con los de JDBC (ver arriba):

  • Repositorios con métodos CRUD listos para usar.

  • Soporte para agregados. Ver https://spring.io/blog/2018/09/24/spring-data-jdbc-references-and-aggregates

  • Buena integración en la infraestructura de Spring, para el manejo de transacciones, inyección de dependencias, traducción de errores, paginación …

  • Sigue siendo un modelo de programación realmente simple. Las declaraciones SQL ocurren exactamente cuando uno esperaría que sucedieran y, si lo desea, puede recurrir a JDBC simple con o sin el soporte de otros marcos, sin romper ninguna abstracción.

  • Maneras agradables y fáciles de extender sus repositorios con métodos de consulta (simplemente defina su interfaz para tener un findByLastName y Spring lo genera sobre la marcha) o @Query anotaciones o métodos personalizados.

  • Soporte para paginación

Hibernar (o alguna otra implementación de JPA) sin Spring Data

JPA hace muchas cosas sobre JDBC

  • Almacenamiento en caché (primer, segundo nivel y caché de consultas)

  • Creación automatizada de instancias a partir de consultas

  • Navegación entre entidades

  • Carga lenta

  • Control / seguimiento sucio de cambios en entidades

Con todas estas cosas sucediendo, puede ser difícil entender qué está sucediendo y por qué. Por supuesto IFF Si estructura su aplicación correctamente, puede recurrir a JDBC si JPA no ofrece lo que desea. Pero he visto varias veces que las personas no lograron mantener la estructura necesaria para que eso funcione. Obviamente, esto es especialmente difícil si no comprende correctamente cómo funciona JPA.

Hibernate (o alguna otra implementación de JPA) con Spring Data

Enumeré los beneficios de Spring Data arriba, solo realice una copia y pegado mental.

Por supuesto, esto hace que la pila completa sea aún más compleja. De las muchas preguntas etiquetadas con spring-data AND hibernate, parece que muchos desarrolladores tienen problemas para identificar qué herramienta hace qué. Pero también al observar estas preguntas, la mayoría describe problemas con Hibernate / JPA y no con Spring Data.

Para terminar:

  • Si desea / necesita un control detallado, utilice JDBC.

  • Si va a utilizar JPA, asegúrese de comprenderlo desde el principio.

  • Si para la tecnología de persistencia está eligiendo Spring Data ofrece un módulo, lo usaría. Hará la vida más fácil. Pero de nuevo soy parcial.

Un problema con su pregunta es que parece insinuar que Spring Data JPA es como Hibernate y eso en realidad no es cierto. Spring Data JPA es simplemente un contenedor centrado en Spring que ofrece una semántica flexible y características que envuelven un proveedor de JPA del cual Hibernate es una implementación.

Ergo, no puede usar Spring Data JPA sin incluir alguna implementación de JPA como Hibernate.

La pregunta básica que se está haciendo entonces es por qué usar JDBC frente a un ORM. Para comprender eso, debe tomarse el tiempo para comprender los beneficios de un ORM. Hay numerosos artículos en Internet que pueden darle eso.

Pero incluso en una aplicación impulsada por ORM, habrá ocasiones en las que tendrá que omitir el marco ORM y usar SQL nativo como lo haría en JDBC. Esos casos a menudo son raros, pero necesarios cuando desea aprovechar alguna función de base de datos no compatible o cuando desea tener el control final de la manipulación de los resultados, etc.

El factor decisivo sobre cuál utilizar depende en última instancia de las necesidades de su aplicación. Pero el hecho de que elija usar un marco ORM no excluye mutuamente la capacidad de ejecutar consultas nativas y declaraciones SQL como lo haría en JDBC. Esas funciones todavía están disponibles, por lo general, las usa en casos excepcionales.

La cuestión es que los datos de Spring para jpa son una abstracción sobre jpa, que es una abstracción sobre JDBC. Si ofrece buenas características, incluso si jpa se puede usar sin él. Se vuelve realmente poderoso con el descanso de datos de Spring.

Pero cuanto más un marco hace por usted, más necesita comprender la tecnología subyacente. Es aún más cierto si usa spring-data-rest. Lo mejor es comenzar por comprender sql (diseño y consultas), luego jpa (carga diferida, estados de instancia, entidades, elementos integrables, cachés, consultas, sincronización de transacciones).

Luego prueba spring-data-jpa y decide si aporta valor a su proyecto. Para las operaciones de guardar, actualizar, eliminar y buscar por identificación, es básicamente un envoltorio persist, merge, remove y find método de EntityManager. La principal ventaja de Spring Data JPA es el soporte de consultas, pero querydsl también es una buena opción. En ambos casos, se requiere una comprensión clara de cómo funciona JPA. Lo primero que debe hacer es activar el registro de SQL para ver si, para un acceso a la base de datos determinado, su implementación jpa ejecuta consultas que una base de datos consideraría correctas. Por ejemplo, la carga ansiosa en una entidad que no está en la caché da como resultado una selección 1 + n, la prueba unitaria pasará y los problemas comenzarán en producción. spring-data-jpa no resolverá el problema por usted.

Hay muchos spring-data- * además de spring-data-jpa, algunos de ellos también ofrecen anotaciones de mapeo (spring-data-cassandra, por ejemplo), lo cual es útil cuando no hay mapeo de object-db.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *