{"id":687,"date":"2019-05-14T11:21:30","date_gmt":"2019-05-14T15:51:30","guid":{"rendered":"http:\/\/gregorgonzalez.com.ve\/blog\/?p=687"},"modified":"2019-05-14T11:21:30","modified_gmt":"2019-05-14T15:51:30","slug":"que-es-jpa-diferencia-con-hibernate","status":"publish","type":"post","link":"https:\/\/gregorgonzalez.com.ve\/blog\/que-es-jpa-diferencia-con-hibernate\/","title":{"rendered":"\u00bfQue es JPA? Diferencia con Hibernate"},"content":{"rendered":"<p>JPA significa Java Persistence Architecture API (API de Arquitectura de Persistencia Java), es una especificaci\u00f3n de java para acceder, persistir y manejar datos entre Clases-Objetos de Java y bases de datos relacionales.<\/p>\n<p>Como conocemos un API significa Appication Programming Interface (Interfaz de Programaci\u00f3n de Aplicaciones) es un grupo de funciones y procedimientos que permiten la creaci\u00f3n de aplicaciones que aceden a caracter\u00edsticas definidas. El API nos provee una guia para crear una interface que cumple con ciertos est\u00e1ndares. JPA nos indica una interface, no nos provee una implementaci\u00f3n de esa interface, no provee ninguna operaci\u00f3n para persistir un objeto a una base de datos. La implementaci\u00f3n podemos crearla nosotros mismos o en este caso utilizar Hibernate.<\/p>\n<p>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.<\/p>\n<p>Entonces como un ejemplo, JPA nos ofrecer\u00eda una simple interface como la siguiente:<\/p>\n<pre class=\"lang:java decode:true \">public interface JPA {     \r\n    public void insert(Object obj);\r\n     \r\n    public void update(Object obj);\r\n     \r\n    public void delete(Object obj);\r\n     \r\n    public Object select();     \r\n}<\/pre>\n<p>Bastante simple y como tal, no nos provee de ning\u00fan valor por falta de la implementaci\u00f3n. Esto es un simple ejemplo, JPA abarca mucho m\u00e1s y el API define muchas interfaces y anotaciones.<\/p>\n<p>Una vez definida, ahora hablamos de la implementaci\u00f3n, espec\u00edficamente de JPA Provider. Los proveedores JPA desarrollan una implementaci\u00f3n de JPA, como lo es Hibernate, EclpseLink o TopLink. Con la implementaci\u00f3n podemos empezar a trabajar con objetos, darles persistencia en base de datos y otras funciones.<\/p>\n<p>Si JPA es como nuestra interface, Hibernate es nuestra implementaci\u00f3n, como por ejemplo, una clase que implementa la interface:<\/p>\n<pre class=\"lang:java decode:true\">public class Hibernate implements JPA { \r\n    public void insert(Object obj) {\r\n        \/\/ L\u00f3gica\r\n    }\r\n \r\n    public void update(Object obj) {\r\n        \/\/ L\u00f3gica        \r\n    }\r\n \r\n    public void delete(Object obj) {\r\n        \/\/ L\u00f3gica\r\n    }\r\n \r\n    public Object select() {\r\n        \/\/ L\u00f3gica\r\n    }\r\n     \r\n    public Object superSelect(){\r\n        \/\/ L\u00f3gica\r\n    }\r\n}<\/pre>\n<p>Aparte de implementar la inteface de JPA, Hibernate tambi\u00e9n provee de m\u00e9todos y procesos adicionales, extendiendo la funcionalidad mas all\u00e1. Este ser\u00eda un ejemplo gen\u00e9rico de persistir un objeto en base de datos (guardar, insertar un registro):<\/p>\n<pre class=\"lang:java decode:true\">public class MiClase { \r\n    public static JPA jpa = new Hibernate();\r\n     \r\n    public static void main(String[] args) {\r\n        Object object = new Object();\r\n        jpa.insert(object);  \/\/ Guarda en BD\r\n    }\r\n}<\/pre>\n<p>Al aplicar una interface en nuestras clases, nos permite crear o cambiar dichas clases sin da\u00f1ar el proceso en nuestro c\u00f3digo, es decir, podemos crear nuestra propia implementaci\u00f3n y usarla, o si en alg\u00fan momento deseamos cambiar Hibernate, lo podemos hacer sencillamente por otro proveedor que tambi\u00e9n implemente la interface de JPA.<\/p>\n<p>Definiendo nuestra propia clase:<\/p>\n<pre class=\"lang:java decode:true\">public class MiImplementacionJpa implements JPA {\r\n    \/\/ L\u00f3gica\r\n}<\/pre>\n<p>El cambio que tendr\u00edamos que realizar en nuestro c\u00f3digo, de Hibernate a MiImplementacionJpa:<\/p>\n<pre class=\"lang:java decode:true\">public class MiClase { \r\n    public static JPA jpa = new MiImplementacionJpa();\r\n     \r\n    public static void main(String[] args) {\r\n        Object object = new Object();\r\n        jpa.insert(object);  \/\/ Guarda en BD\r\n    }\r\n}<\/pre>\n<p>El cambio es simple cuando utilizamos funcionalidades especificas de JPA, sin embargo como se hab\u00eda dicho antes, Hibernate tambi\u00e9n provee sus propios m\u00e9todos y funciones adicionales, en este caso estar\u00edamos casados con Hibernate y cambiar\u00edamos nuestro c\u00f3digo a obligar que solo se use la implementaci\u00f3n de Hibernate:<\/p>\n<pre class=\"lang:java decode:true \">public class MiClase { \r\n    public static Hibernate jpa = new Hibernate();\r\n     \r\n    public static void main(String[] args) {\r\n        Object object = new Object();\r\n        jpa.insert(object);  \/\/ Guarda en BD\r\n    }\r\n}<\/pre>\n<p>En esta situaci\u00f3n no usar\u00edamos la clase JPA directamente sino que podemos extender de la clase de Hibernate y as\u00ed crear nuestras propias clases compatibles.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>JPA significa Java Persistence Architecture API (API de Arquitectura de Persistencia Java), es una especificaci\u00f3n 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\u00f3n de Aplicaciones) es un grupo de funciones y procedimientos que permiten la [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":688,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_exactmetrics_skip_tracking":false,"_exactmetrics_sitenote_active":false,"_exactmetrics_sitenote_note":"","_exactmetrics_sitenote_category":0,"footnotes":""},"categories":[227],"tags":[246,248,245,247],"_links":{"self":[{"href":"https:\/\/gregorgonzalez.com.ve\/blog\/wp-json\/wp\/v2\/posts\/687"}],"collection":[{"href":"https:\/\/gregorgonzalez.com.ve\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/gregorgonzalez.com.ve\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/gregorgonzalez.com.ve\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/gregorgonzalez.com.ve\/blog\/wp-json\/wp\/v2\/comments?post=687"}],"version-history":[{"count":1,"href":"https:\/\/gregorgonzalez.com.ve\/blog\/wp-json\/wp\/v2\/posts\/687\/revisions"}],"predecessor-version":[{"id":689,"href":"https:\/\/gregorgonzalez.com.ve\/blog\/wp-json\/wp\/v2\/posts\/687\/revisions\/689"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/gregorgonzalez.com.ve\/blog\/wp-json\/wp\/v2\/media\/688"}],"wp:attachment":[{"href":"https:\/\/gregorgonzalez.com.ve\/blog\/wp-json\/wp\/v2\/media?parent=687"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/gregorgonzalez.com.ve\/blog\/wp-json\/wp\/v2\/categories?post=687"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/gregorgonzalez.com.ve\/blog\/wp-json\/wp\/v2\/tags?post=687"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}