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


Answers

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

Question

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 cree que una característica debe estandarizarse, debe hablar y solicitarla 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?



JPA es solo una especificación, mientras que Hibernate es uno de los proveedores de JPA, es decir, hibernate está implementando varias cosas mencionadas en el contrato de JPA.




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

Hibernate: es solo un proveedor de JPA que tiene la implementación de las funciones en JPA y puede 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 en ese momento en que ya no tiene que escribir su JPA. 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.

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




JPA es una API, una que Hibernate implementa. Hibernate es anterior a JPA. Antes de JPA, escribes código de hibernación nativo para hacer tu ORM. JPA es solo la interfaz, por lo que ahora usted escribe el código JPA y necesita encontrar una implementación. Hibernate pasa a ser una implementación.

Entonces, sus opciones son: hibernate, toplink, etc.

La ventaja de JPA es que le permite cambiar su implementación si es necesario. La desventaja es que la API nativa hibernate / toplink / etc ... puede ofrecer una funcionalidad que la especificación JPA no admite.




JPA es la API Java Persistence. Que especifica solo las especificaciones para las API. Significa que el conjunto de reglas y pautas para crear las API. Si dice otro contexto, es un conjunto de estándares que proporciona el contenedor para crear esas API, se puede usar para acceder al objeto de entidad desde la base de datos. JPA es proporcionado por Oracle. Cuando vamos a hacer acceso a la base de datos, definitivamente necesitamos su implementación. Significa que JPA especifica solo pautas para implementar API. Hibernate es un proveedor / proveedor de JPA responsable de implementar esas API. Al igual que Hibernate TopLink y Open JPA, algunos ejemplos de proveedores de API JPA. Entonces usamos las API estándar especificadas por JPA a través de Hibernate.




JPA es una especificación de API de Java que describe la gestión de datos relacionales en aplicaciones que utilizan Java Platform. donde Hibernate es una biblioteca ORM (Object Relational Mapping) que sigue la especificación JPA.

Puede pensar en JPA como un conjunto de reglas que implementa Hibernate.




JPA es solo una especificación que necesita una implementación concreta. La implementación predeterminada proporcionada por Oracle es "Eclipselink" ahora. Toplink es donado por Oracle a la fundación Eclipse para fusionarse con eclipselink.

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. Hibernate es súper conjunto de JPA con algunas funciones específicas adicionales de Hibernate. Entonces, 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, que es una extensión de la implementación de Kodo.

JPA vs Hibernate




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 es relativamente 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 características no estándar específicas) .

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.




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.







Java: su independencia no solo proviene del sistema operativo, sino también del proveedor.

Por lo tanto, debería poder implementar su aplicación en diferentes servidores de aplicaciones. JPA se implementa en cualquier servidor de aplicaciones compatible con Java EE y permite intercambiar servidores de aplicaciones, pero luego la implementación también está cambiando. Una aplicación Hibernate puede ser más fácil de implementar en un servidor de aplicaciones diferente.




Links