Pregunta ¿Cuál es la diferencia entre JPA e Hibernate? [cerrado]


Entiendo que JPA 2 es una especificación e Hibernate es una herramienta para ORM. Además, entiendo que Hibernate tiene más funciones que JPA 2. Pero desde un punto de vista práctico, ¿cuál es realmente la diferencia?

Tengo experiencia usando iBatis y ahora estoy tratando de aprender Hibernate o JPA2. Recogí el libro de Pro JPA2 y sigue refiriéndose al "proveedor de JPA". Por ejemplo:

Si crees que una característica debe estandarizarse, debes hablar claro   y solicítelo a su proveedor de JPA

Esto me confunde, así que tengo algunas preguntas:

  • Solo con JPA2 puedo obtener datos de DB simplemente anotando mi POJO
  • ¿Se supone que JPA2 debe usarse con un "Proveedor de JPA", por ejemplo, TopLink o Hibernate? Si es así, ¿cuál es el beneficio de usar JPA2 + Hibernate en comparación con JPA2 solo, o en comparación con Hibernate solo?
  • ¿Puedes recomendar un buen libro práctico de JPA2? "Pro JPA2" parece más una biblia y referencia en JPA2 (No entra en las consultas hasta la mitad posterior del libro). ¿Hay algún libro que adopte un enfoque de problema / solución para JPA2?

682
2018-03-27 00:04


origen


Respuestas:


Como afirma, JPA es solo una especificación, lo que significa que no hay implementación. Puedes anotar tus clases tanto como quieras con las anotaciones JPA, sin embargo, sin una implementación, no pasará nada. Piense en JPA como las pautas que se deben seguir o en una interfaz, mientras que la implementación de JPA de Hibernate es un código que cumple con la API tal como se define en la especificación JPA y proporciona la funcionalidad bajo el capó.

Cuando utiliza Hibernate con JPA, en realidad está utilizando la implementación de Hibernate JPA. El beneficio de esto es que puede cambiar la implementación de JPA de Hibernate para otra implementación de la especificación JPA. Cuando utiliza Hibernate directamente, está bloqueando la implementación porque otros ORM pueden usar diferentes métodos / configuraciones y anotaciones, por lo tanto, no puede simplemente cambiar a otro ORM.

Para una descripción más detallada, lee mi Entrada de blog.


777
2018-03-27 00:08



JPA es el baile, Hibernate es el bailarín.


634
2018-02-03 17:25



Algunas cosas son demasiado difíciles de entender sin una perspectiva histórica del lenguaje y la comprensión del JCP.

A menudo, hay terceros que desarrollan paquetes que cumplen una función o llenan un espacio que no forma parte del JDK oficial. Por diversos motivos, esa función puede convertirse en parte del Java JDK a través del JCP (Java Community Process)

Hibernate (en 2003) proporcionó una forma de abstraer SQL y permitir a los desarrolladores pensar más en términos de objetos persistentes (ORM). Usted notifica a hibernate sobre sus objetos Entity y automáticamente genera la estrategia para persistir. Hibernate proporcionó una implementación para hacer esto y la API para impulsar la implementación a través de la configuración XML o anotaciones.

El problema fundamental ahora es que su código se combina estrechamente con un proveedor específico (Hibernate) para lo que mucha gente pensó que debería ser más genérico. De ahí la necesidad de una API de persistencia genérica.

Mientras tanto, el JCP con mucha entrada de Hibernate y otros vendedores de herramientas ORM estaba desarrollando JSR 220 (Solicitud de especificación de Java) que dio como resultado JPA 1.0 (2006) y eventualmente JSR 317 que es JPA 2.0 (2009). Estas son las especificaciones de una API Java Persistence genérica. La API se proporciona en el JDK como un conjunto de interfaces para que sus clases puedan depender de javax.persistence y no se preocupen por el proveedor en particular que está haciendo el trabajo de persistir en sus objetos. Esta es solo la API y no la implementación. Hibernate ahora se convierte en uno de los muchos proveedores que implementan la especificación JPA 2.0. Puede codificar para JPA y elegir el proveedor de ORM que cumpla con sus necesidades.

Hay casos en que Hibernate puede darle características que no están codificadas en JPA. En este caso, puede optar por insertar una anotación específica de Hibernate directamente en su clase, ya que JPA no proporciona la interfaz para hacer eso.

Fuente: http://www.reddit.com/r/java/comments/16ovek/understanding_when_to_use_jpa_vs_hibernate/


158
2018-02-24 16:56



JPA es la interfaz mientras que Hibernate es la implementación.

Tradicionalmente ha habido múltiples soluciones ORM de Java:

cada implementación define su propia definición de mapeo o API de cliente. El grupo de expertos JPA reunió lo mejor de todas estas herramientas y crearon el estándar Java Persistence API.

Una API de persistencia estándar es muy conveniente desde el punto de vista del cliente, por lo que relativamente es fácil cambiar una implementación con la otra (aunque en la práctica no es tan simple porque en proyectos grandes, de todos modos, tendrá que usar funciones específicas no estándar).

La JPA estándar ha llevado a la competencia Java ORM a un nuevo nivel y esto solo puede llevar a mejores implementaciones.

Como se explica en mi libro, persistencia de Java de alto rendimiento, Hibernate ofrece características que aún no son compatibles con JPA:

Estas características adicionales permiten a Hibernate satisfacer muchos requisitos de persistencia exigidos por grandes aplicaciones empresariales.


100
2017-11-09 07:11



Desde el Wiki.

Motivación para crear la API de Java Persistence

Muchos desarrolladores empresariales de Java utilizan objetos persistentes livianos proporcionados por marcos de código abierto u Objetos de acceso a datos en lugar de beans de entidad: los beans de entidad y enterprise beans tenían una reputación de ser demasiado pesados ​​y complicados, y solo podían usarse en servidores de aplicaciones Java EE. Muchas de las características de los marcos de persistencia de terceros se incorporaron a la API Java Persistence y, a partir de 2006, proyectos como Hibernate (versión 3.2) y versión de código abierto TopLink Essentials se han convertido en implementaciones de Java Persistence API.

Como se dijo en el Página JCP el enlace Eclipse es la Implementación de referencia para JPA. Mira a esta respuesta por un poco más sobre esto.

JPA tiene características que compensarán un marco ORM estándar. Como JPA forma parte de las especificaciones de Java EE, puede usar solo JPA en un proyecto y debería funcionar con cualquier Servidores compatibles con Java EE. Sí, estos servidores tendrán las implementaciones para la especificación JPA.

Hibernate es el más popular ORM marco, una vez JPA Hibernate introducido se ajusta a la JPA presupuesto. Además del conjunto básico de especificaciones que debe seguir, hibernate proporciona muchas cosas adicionales.


58
2018-03-27 03:29



Hibernate es un proveedor de JPA.

La página JPA Vs Hibernate por Krishna Srinivasan dice:

JPA es una especificación para acceder, conservar y gestionar los datos entre los objetos Java y la base de datos relacional. Como la definición dice su API, es solo la especificación. No hay implementación para la API. JPA especifica el conjunto de reglas y directrices para desarrollar las interfaces que siguen el estándar. Directo al punto: JPA solo son pautas para implementar el Mapeo Relacional de Objetos (ORM) y no hay un código subyacente para la implementación.   Donde como, Hibernate es la implementación real de las pautas de JPA. Cuando hibernate implementa la especificación JPA, esto será certificado por el grupo JPA al seguir todos los estándares mencionados en la especificación. Por ejemplo, las pautas de JPA proporcionarían información de características obligatorias y opcionales para implementarse como parte de la implementación de JPA.


20
2017-09-12 10:38



JPA es solo una especificación que necesita una implementación concreta. los oráculo de implementación predeterminado proporcionar es "Eclipselink" ahora. (Toplink es donado por Oracle a la fundación Eclipse para fusionarse con eclipselink)

(Referencia: http://www.oracle.com/technetwork/middleware/toplink/index-085257.html http://www.eclipse.org/org/press-release/20080317_Eclipselink.php )

Usando Eclipselink, uno puede estar seguro de que el código es portátil para cualquier implementación si surge la necesidad. Hibernate también es una implementación completa de JPA + MORE (Tipo de JPA Plus). Hibernate es súper conjunto de JPA con algunas funciones específicas adicionales de Hibernate. Por lo tanto, la aplicación desarrollada en Hibernate puede no ser compatible cuando se cambia a otra implementación. Todavía hibernar es la elección de la mayoría de los desarrolladores como la implementación de JPA y ampliamente utilizada.

Otra implementación de JPA es OpenJPA (openjpa.apache.org) que es una extensión de la implementación de Kodo.


16
2017-11-29 07:23



JPA: es como un interfaz y no tienen una implementación concreta para usar funciones que están en JPA.

Hibernar: es solo una Proveedor de JPA que tienen la implementación de las funciones en JPA y pueden tener algunas funciones adicionales que podrían no estar allí en JPA.

CONSEJO: puedes usar

     *combo 1* : JPA + JPA Provider(Hibernate) 
     *combo 2* : only Hiberante which does not need any interface 

Combo 1 : se usa cuando siente que su hibernación no está brindando un mejor rendimiento y desea cambiar el proveedor de JPA esa vez que no tiene que escribir su JPA nuevamente. Puede escribir otro Proveedor de JPA ... y puede cambiar tantas veces como pueda.

Combo 2 : se usa muy poco, ya que cuando no va a cambiar su proveedor de JPA a toda costa.

Visitar http://blog-tothought.rhcloud.com//post/2, donde tu completa confusión se aclarará.


15
2017-08-03 09:06



JPA es la interfaz, Hibernate es una implementación de esa interfaz.


11
2018-04-21 13:09