Java Persistence API (JPA)

JPA es la propuesta est谩ndar que ofrece Java para implementar un Framework Object Relational Mapping (ORM), que permite interactuar con la base de datos por medio de objetos, de esta forma, JPA es el encargado de convertir los objetos Java en instrucciones para el Manejador de Base de Datos (MDB).

Cuando em pezamos a trabajamos con bases de datos en Java lo primero que nos ense帽an es a utiliza el API de JDBC el cual nos permite realizar consultas directas a la base de datos a trav茅s de consultas SQL nativas. JDBC por mucho tiempo fue la 煤nica forma de interactuar con las bases de datos, pero representaba un gran problema y es que Java es un lenguaje orientado a objetos y se ten铆a que convertir los atributos de las clases en una consulta SQL como SELECT, INSERT, UPDATE, DELTE, etc. lo que ocasionaba un gran esfuerzo de trabajo y un provocaba muchos errores en tiempo de ejecuci贸n, debido principalmente a que las consultas SQL se ten铆an que generar frecuentemente al vuelo.

Puedes ver en este post la diferencia entre JPA y JDBC.

Una de las cosas m谩s importantes para comprender que es JPA es entender que JPA es una especificaci贸n y no un Framework como tal, 驴pero quiere decir esto exactamente?, pues bien, una especificaci贸n no es m谩s que un documento en el cual se plasman las reglas que debe de cumplir cualquier proveedor que dese desarrollar una implementaci贸n de JPA, de tal forma que cualquier persona puede  tomar la especificaci贸n y desarrollar su propia implementaci贸n de JPA, 驴Esto quiere decir que pueden existir muchas implementaciones de JPA? la respuesta es s铆, de echo en la actualidad existen varios proveedor como lo son los siguientes:

Dentro de las implementaciones m谩s utilizadas est谩n Hibernate, EclipseLink & TopLink, las dos primeras son las m谩s utilizadas en el mundo open source y TopLink es muy utilizada en desarrollos y productos relacionados con Oracle. Antes de preguntarnos cu谩l es la diferencia entre todas estas implementaciones tenemos que comprender que en teor铆a todas deber铆a de ofrecer la misma funcionalidad y el mismo comportamiento, lo que nos permitir铆a migrar entre una implementaci贸n a otra sin afectar en nada nuestra aplicaci贸n. Desde luego esto es solo teor铆a, ya que en la actualidad no todas las implementaciones implementan al 100% la especificaci贸n de JPA, adem谩s en escenario muy concretos puede que se comporten ligeramente diferente, por lo que puede requerir realizar algunos ajustes antes de migrar correctamente de proveedor.

Tamb铆en los quiero invitar a ver mi curso de JPA, donde explico todos estos temas aplicados con API REST, https://codmind.com/courses/jpa

 Los invito a mi Curso de Mastering JPA, donde habla de todos estos temas y crearemos un API REST para probar todos los conceptos de persistencia.

Esta gu铆a de JPA est谩 dividida en una serie de art铆culos que nos permita separar tema para poderlo explicar mejor y de una forma m谩s clara, recuerda que puedes inscribirte a mi blog para ser notificado cada vez que avancemos en esta gu铆a. La gu铆a tendr谩 la siguiente estructura:

JPA 脥ndice

Introducci贸n:

En esta secci贸n tocaremos los elementos m谩s b谩sicos de JPA, aprenderemos a crear un proyecto, configurarlo, aprenderemos las anotaciones b谩sicas y crearemos nuestras primera Entidad.

EntityManager:

En este apartado tocaremos a profundidad el coraz贸n de JPA. El EntityManager es uno de los objetos m谩s relevantes de toda el API, pues es quien administra el ciclo de vida de todas las entidades.

Cardinalidad y relaciones:

Hablaremos las diferentes cardinalidades soportadas por JPA, aprenderemos como es que una entidad puede relacionarse con otra y como es que son afectadas las entidades al estar relacionadas.

Trabajando con colecciones:

M谩s all谩 del tipo de cardinalidad que definamos para relacionar nuestras entidades, las colecciones nos ayudan a controlar la forma en que los objetos son persistidos, consultados y ordenados.

  • Colecciones con @ElementCollection
  • Anotaci贸n @CollectionTable
  • Collection & Set
  • Ordenamiento de colecciones con @OrderBy
  • Ordenamiento persistente con @OrderColumn
  • Colecciones de tipo Map

Querys:

En esta secci贸n aprenderemos a utilizar JPQL o Java Persistence Query Lenguaje, el cual es un lenguaje basado en SQL pero que est谩 dise帽ado para realizar consultas sobre Objetos. Aprenderemos a crear consultas al vuelo, ejecutar consultas preparadas y ejecutar procedimientos almacenados de la base de datos.

  • Introducci贸n a las clases Query & TypedQuery
  • Introducci贸n a JPQL
  • Subquerys
  • Query din谩micos & Querys preparados (Named Querys)
  • Query hints
  • Update & Delete Querys

Criteria API:

A partir de la versi贸n 2.0 de JPA se integra el API de criteria, el cual proporciona un mecanismo de consultas m谩s avanzado, permitiendo realizar consultas sin la necesidad de escribir JPQA, en su lugar su utiliza una serie de m茅todo que van generando la consulta.

  • Introducci贸n al API Criteria
  • Query Root
  • Path Expressions
  • Selecting Expressions
  • Inner and Outer joins
  • Fetch Joins
  • Predicados

T贸picos avanzados:

En esta secci贸n se habla de diversas partes del API que est谩n consideradas como avanzadas, ya sea por su complejidad o porque son desconocidos generalmente.

  • Trabajando con Callbacks
  • Manejo de eventos con EntityListeners
  • Validaci贸n de Entidades (Validation)
  • Bloqueos (Optimistic Locking & Pessimistic Locking)

NOTA: Los temas aqu铆 mostrados ser谩n agregados paulatinamente por lo que puedes registrarte para recibir las notificaciones directamente a tu correo electr贸nico cuando una nueva secci贸n del tutorial sea agregada.