2010-06-24 23 views
7

¿Podría alguien explicarme cuáles son las principales diferencias entre JPA e Hibernate?Hibernate y JPA, ¿qué usar, dónde?

¿Dónde utilizar Hibernate?

¿Dónde utilizar JPA?

¿Por qué no entity bean?

+0

posible duplicado de [similitud y diferencia entre jpa e hibernate.] (http://stackoverflow.com/questions/1770211/similarity-and-difference-between-jpa-and-hibernate) –

Respuesta

7

Un poco de historia:

beans de entidad eran parte de EJB 1 y 2. Ellos fueron un infierno para trabajar, por lo que una alternativa era debido. Luego apareció Hibernate. (No recuerdo estos tiempos)

Hibernate evolucionado para ser un estándar de facto en el mapeo relacional de objetos. Luego se decidió que se necesita un estándar, por lo que se creó la especificación JPA, muy influenciada por Hibernate.

JPA es solo una especificación: define qué debe hacer un marco ORM y qué anotaciones debe admitir. APP es implementada por muchos vendedores - Hibernate, EclipseLink, OpenJPA, etc.

Así:

  • no utilizan beans de entidad
  • usar cualquier aplicación APP que te gusta. Hibernate es definitivamente una buena opción.

Actualización: Sobre su segunda pregunta en los comentarios:

Sí, puede utilizar JPA con granos de sesión EJB:

@Stateless 
public class YourSessionBean implements RemoteInterface { 

    @PersistenceContext 
    private EntityManager entityManager; // this is the JPA EntityManager 
} 

y usted tiene el gestor de la entidad inyecta por el contenedor y listo para operar entidades JPA. Por supuesto, necesitaría hacer configuraciones para eso, pero eso está fuera del alcance de esta pregunta.

+0

Gracias, ¿Puedo usar session bean y JPA? – Tony

+0

@Thomman si se refiere a beans de sesión EJB, consulte mi actualización – Bozho

+0

En realidad, CMP Entity Beans era parte de EJB 1.0 –

3

JPA es una especificación. Hibernate es una implementación de la especificación. Otra implementación es Toplink, pero hay otras.

Debe intentar confiar tanto como sea posible en las características estándar de JPA. Sin embargo, hay algunas funciones útiles específicas de Hibernate, pero harán que su aplicación sea menos portátil si decide cambiar la implementación.

Por entidad bean, ¿quiere decir EJB 2.x entity bean? Esta es una tecnología "muerta" que resultó ser demasiado difícil de usar.

1

Las diferencias son sutiles y bastante difícil de entender:

  1. APP es la API de Java EE para el mapeo-relacional de objetos. Debería tener JPA en cada servidor de aplicaciones Java EE completo en la tierra.
  2. Hibernate es la implementación de JPA de JPA. La razón por la que las personas suelen confundir a ambos es porque JPA está algo inspirado en Hibernate.
  3. Entity Bean es solo un concepto. Este concepto significa que representará las entidades persistentes de la solución de Java EE con las clases de Java. ES DECIR. si tiene clientes en su sistema, probablemente tendrá un bean de entidad del Cliente para cada cliente en su base de datos. Usted controla (crea, actualiza, elimina, recupera) sus beans de entidad con JPA.La gente a veces confunde Entity Beans con implementaciones anteriores de Entity Beans en Java EE 1.4 y versiones anteriores. La verdad es que aún puede tener Entity Beans con JPA/Hibernate (o JPA/Toplink) en los servidores de aplicaciones Java más nuevos.
+0

Gracias, ¿podría explicar su tercer punto? – Tony

2

Me parece que a efectos prácticos todas las implementaciones de la APP, incluyendo hibernación son extremadamente similares y trabajarán para los mismos casos de uso. Sin embargo, tienden a ser un poco, ehmmm ..., temperamentales si se usan para cosas para las que no fueron diseñados.

Como parece que está decidiendo sobre un marco de persistencia, me gustaría llamar su atención que hay otros marcos que funcionan muy bien en otros casos de uso donde los JPA son difíciles de usar.

iBatis le permite escribir consultas SQL simples en un archivo separado y asignarlas a objetos Java. Esto mantiene el código SQL fuera de su código Java. Le da un nombre a las consultas y se refiere a ese nombre en su código. Esto funciona extremadamente bien con una base de datos heredada más grande con la que necesita integrarse.

Para algunas consultas informales simples cosas como Spring JdbcTemplate también funcionan sin la carga cognitiva de los marcos anteriores.

0

Una lista de algunos de los principales proveedores de JPA está en http://en.wikipedia.org/wiki/Java_Persistence_API en la sección JPA2.

Lo mejor es tomar sus propias decisiones con respecto a la implementación, ya que es usted quien apoyará su aplicación, pero siempre se apega a las funciones basadas en estándares en lugar de "complementos"; se beneficiará en el largo plazo

Cuestiones relacionadas