¿Que es JPA? Diferencia con Hibernate


JPA significa Java Persistence Architecture API (API de Arquitectura de Persistencia Java), es una especificación de java para acceder, persistir y manejar datos entre Clases-Objetos de Java y bases de datos relacionales.

Como conocemos un API significa Appication Programming Interface (Interfaz de Programación de Aplicaciones) es un grupo de funciones y procedimientos que permiten la creación de aplicaciones que aceden a características definidas. El API nos provee una guia para crear una interface que cumple con ciertos estándares. JPA nos indica una interface, no nos provee una implementación de esa interface, no provee ninguna operación para persistir un objeto a una base de datos. La implementación podemos crearla nosotros mismos o en este caso utilizar Hibernate.

Cabe destacar que el proceso de convertir entidades de la base de datos a objetos se le conoce como ORM Object Relational Mapping, incluyendo los procedimientos para acceder, persistir y manejar datos.

Entonces como un ejemplo, JPA nos ofrecería una simple interface como la siguiente:

Bastante simple y como tal, no nos provee de ningún valor por falta de la implementación. Esto es un simple ejemplo, JPA abarca mucho más y el API define muchas interfaces y anotaciones.

Una vez definida, ahora hablamos de la implementación, específicamente de JPA Provider. Los proveedores JPA desarrollan una implementación de JPA, como lo es Hibernate, EclpseLink o TopLink. Con la implementación podemos empezar a trabajar con objetos, darles persistencia en base de datos y otras funciones.

Si JPA es como nuestra interface, Hibernate es nuestra implementación, como por ejemplo, una clase que implementa la interface:

Aparte de implementar la inteface de JPA, Hibernate también provee de métodos y procesos adicionales, extendiendo la funcionalidad mas allá. Este sería un ejemplo genérico de persistir un objeto en base de datos (guardar, insertar un registro):

Al aplicar una interface en nuestras clases, nos permite crear o cambiar dichas clases sin dañar el proceso en nuestro código, es decir, podemos crear nuestra propia implementación y usarla, o si en algún momento deseamos cambiar Hibernate, lo podemos hacer sencillamente por otro proveedor que también implemente la interface de JPA.

Definiendo nuestra propia clase:

El cambio que tendríamos que realizar en nuestro código, de Hibernate a MiImplementacionJpa:

El cambio es simple cuando utilizamos funcionalidades especificas de JPA, sin embargo como se había dicho antes, Hibernate también provee sus propios métodos y funciones adicionales, en este caso estaríamos casados con Hibernate y cambiaríamos nuestro código a obligar que solo se use la implementación de Hibernate:

En esta situación no usaríamos la clase JPA directamente sino que podemos extender de la clase de Hibernate y así crear nuestras propias clases compatibles.

Deja un comentario

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