2009-05-08 31 views
13

Estoy investigando el desarrollo de aplicaciones empresariales en Java, .NET y Groovy. Para cada plataforma, vamos a probar lo difícil que es realizar un simple servicio web SOAP. Utilizaremos las herramientas y las bibliotecas que se usan con más frecuencia para investigar el mundo real con la mayor precisión posible.JPA o Hibernate para Java ¿Persistencia?

En este sentido, al usar Hibernate para la persistencia, ¿reflejaría mejor el mundo real para usar el nuevo JPA (Java Persistence API), o el API personalizado de Hibernate que existía antes de que llegara JPA?

Respuesta

14

Como probablemente ya sepa, a partir de 3.2 Hibernate tiene la certificación JPA. Puede usar Hibernate fácilmente como su proveedor de JPA sin tener que utilizar ninguna de las API "personalizadas" de Hibernate.

Recomendaría usar JPA directo con Hibernate como proveedor. Y use anotaciones en lugar de XML (mucho más agradable).

Luego, cuando necesite un poco más, siempre puede obtener la sesión de Hibernate. Por ejemplo, a menudo encuentro que necesito hacer esto para pasar una colección a una consulta como un parámetro (setParameterList).

+0

Lo sé, pero en una conferencia reciente que asistimos se expresó que JPA todavía no está maduro y no expone todas las características avanzadas todavía. –

+1

Tenga en cuenta que JPA también tiene que actuar como el mínimo común denominador entre las capas de persistencia subyacentes que admite. Por lo tanto, si Hibernate tiene la característica A de barrido rápido y Toplink no, entonces la API de JPA no puede exponer la característica. –

1

Es curioso cómo redactada así su pregunta

nueva APP ... o el viejo y simple Hibernate

Suena como uno ha estado ahí desde siempre y el otro acaba de ser liberado . Por supuesto que no es verdad. JPA fue influenciado no solo por Hibernate, sino también por TopLink y por beans de entidad J2EE. La primera referencia al borrador JSR 220 regresa de 2003, ¿cómo es eso nuevo? Si usa JPA con Hibernate, aún usa Hibernate y puede aplicar cualquier extensión patentada que Hibernate tenga.

Así que la elección es suya: el uso API propietario o usar equivalente establecidos y API estándar ...

0

Se podría seguir con una especificación JPA pura, en caso de que desee intercambiar Hibernate, pero lo que usted' Probablemente encuentre en algún momento que nunca lo va a cambiar, y que se ha estado perdiendo todas las características realmente geniales de Hibernate.

Recomiendo usar Hibernate directamente, y como sugiere Damo, anotaciones en lugar de XML. Asegúrese de tener una comprensión firme de la "magia" que aporta Hibernate. Si no tiene cuidado, realmente podría demoler la base de datos. Por ejemplo, hay un problema de n + 1 consulta dependiendo de cómo lo hace @OneToOne une:

Hibernate OneToOne automatic join fetching (resolving n+1 problem)

También recomiendo usar una base de datos integrada para las pruebas de la unidad/de integración en sus consultas Hibernate, y el reloj el SQL que se genera para asegurarse de que se vea como algo que escribirías a mano.

Cuestiones relacionadas