Introducción a JPA y Hibernate

En Java los datos se representan en objetos. Sin embargo, las bases de datos habituales (como MySQL, PostgreSQL, Oracle) guardan sus datos en forma relacional. Evidentemente existe una brecha entre estos dos mundos ("objetos-relacional") que, de alguna manera, debe completarse.

Los frameworks que se encargan de adaptar el mundo de objetos al relacionan son conocidos como ORM (Object-Relational Mapping).

JPA

Java Persistence API (JPA) es un framework que forma parte de Java, y ofrece un conjunto de interfaces y APIs para resolver el problema del almacenamiento de los objetos en una base de datos relacional. JPA no es una implementación en si misma, sino que brinda interfaces para ser luego implementadas por distintos proveedores. De esta manera, en el código usamos el API de JPA, que luego será implementado por la librería que más nos convenga.

A forma muy simple, una tabla se mapea contra una clase, y cada columna contra un atributo de dicha clase. Usaremos anotaciones de JPA para indicar estas relaciones. De esta forma, la implementación con JPA se encargará de ocultar la complejidad del acceso a datos, exponiendo solamente objetos. Idealmente, en una aplicación con JPA, no es necesario generar querys SQL para interactuar con los datos (de hecho, la aplicación no tiene contacto directo con la base de datos).

JPA ofrece: 

  1. un conjunto de anotaciones (del paquete javax.persistence) para anotar a nuestros objetos e indicar cómo se realiza el mapeo a la base de datos
  2. un lenguaje de consultas llamado JPQL (Java Persistence Query Language) para consultar los objetos persistences.

Hibernate

Existen varios ORM en el mercado que implementan JPA, si bien Hibernate es el ORM que se convirtió en un estandard-de-facto. Hibernate entonces es un ORM que implementa JPA.

Como usaremos las interfaces de JPA, no habrá ninguna referencia directa en nuestro código a Hibernate.

Los mapeos

Como dijimos, las tablas a usar se mapean contra clases. Es decir, tendremos que establecer cuál es la relación entre cada tabla y cada clase, y cuál es la relación entre cada columna con cada atributo de clase. Con JPA, estos mapeos pueden escribirse en archivos XML o utilizando anotaciones. En este curso vamos a usar anotaciones para realizar los mapeos, ya que en términos generales es una implementación más sencilla y rápida para desarrollar y mantener.

Estos objetos mapeados consisten en uno o más atributos que son "id" (la PK en la tabla), y atributos varios.

Leer más

Te recomiendo los siguientes links para leer más sobre Hibernate