java ¿Cuál es la diferencia entre JPA y Hibernate?



11 Answers

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

java hibernate jpa java-ee orm

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 la JPA 2. Pero desde un punto de vista práctico, ¿cuál es realmente la diferencia?

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

Si cree que una característica debería estar estandarizada, debe hablar y solicitarla a su proveedor de JPA

Esto me confunde así que tengo algunas preguntas:

  • Usando JPA2 solo puedo recuperar datos de DB simplemente anotando mis POJO's
  • ¿Se supone que JPA2 debe usarse con un "Proveedor 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 bien una biblia y una referencia en JPA2 (no llega a Consultas hasta la última mitad del libro). ¿Hay un libro que tenga un enfoque de problema / solución para JPA2?



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 de JPA reunió la mejor de todas estas herramientas y, por lo tanto, crearon el estándar API de persistencia de Java.

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

La JPA estándar ha llevado la competencia de 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 funciones que aún no son compatibles con JPA :

Estas características adicionales le permiten a Hibernate abordar muchos requisitos de persistencia exigidos por aplicaciones de grandes empresas.




Hibernate es un proveedor de JPA.

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

JPA es una especificación para acceder, persistir y administrar 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 pautas para desarrollar las interfaces que siguen el estándar. Directo al punto: JPA es solo una guía 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 que se implementarán como parte de la implementación de JPA.




JPA: es como una interfaz y no tiene una implementación concreta para usar las funciones que están allí 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 disponibles 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á funcionando mejor y desea cambiar de Proveedor de JPA en ese momento que no tiene que escribir su JPA una vez más. Puede escribir otro proveedor JPA ... y puede cambiar tantas veces como pueda.

Combo 2 : se usa mucho menos que cuando no va a cambiar su proveedor de JPA a cualquier costo.

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







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

Así que sus opciones son las siguientes: hibernar, enlazar, etc.

La ventaja de JPA es que le permite intercambiar 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.




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

Por lo tanto, debe 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 la implementación también está cambiando. Una aplicación de Hibernate puede ser más fácil de implementar en un servidor de aplicaciones diferente.




JPA es una especificación de la API de Java que describe la administración de datos relacionales en aplicaciones que utilizan la Plataforma Java. where as Hibernate es una biblioteca ORM (Object Relational Mapping) que sigue la especificación JPA.

Puede pensar JPA como un conjunto de Reglas implementadas por Hibernate.




JPA es solo una especificación que necesita 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.

Al usar 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 de JPA completa + MÁS. Hibernate es un super conjunto de JPA con algunas funciones adicionales específicas de Hibernate. Por lo tanto, la aplicación desarrollada en Hibernate puede no ser compatible cuando se cambia a otra implementación. Aún así, hibernate es la elección de la mayoría de los desarrolladores como implementación de JPA y se usa ampliamente.

Otra implementación de JPA es OpenJPA, que es una extensión de la implementación de Kodo.

JPA vs Hibernate




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 la API de persistencia de Java. Que Especifica sólo las especificaciones para las API. Significa que el conjunto de reglas y directrices para la creación de las API. Si dice otro contexto, es un conjunto de estándares que proporciona la envoltura para crear esas API, que puede usarse para acceder al objeto de entidad desde la base de datos. JPA es proporcionada 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 APIs. Hibernate es un proveedor / proveedor de JPA que es responsable de implementar esas API. Al igual que Hibernate TopLink y Open JPA son algunos ejemplos de proveedores de API JPA. Por lo tanto, utilizamos API estándar especificadas por JPA a través de hibernación.




Related