Para una aplicación web simple, ¿cuál es la mejor opción para la implementación de JPA?

Si bien cada proveedor de JPA (Hibernate, EclipseLink, OpenJPA) implementa las especificaciones de la API de Java Persistence, necesitará más que eso incluso para una pequeña aplicación web.

Por ejemplo, Hibernate ofrece las siguientes características que no se han incluido en JPA 2.1:

  • generadores de identificadores extendidos (hi / lo, agrupados, agrupados-lo)
  • procesamiento por lotes preparado transparente
  • @SQLInsert CRUD personalizables ( @SQLInsert , @SQLUpdate , @SQLDelete )
  • filtros de entidad / colección estáticos / dinámicos (por ejemplo, @Filter , @Where , @Where )
  • asignación de propiedades a fragmentos de SQL (por ejemplo, @Formula )
  • entidades inmutables (por ejemplo, @Immutable )
  • más modos de descarga (por ejemplo, FlushMode.ALWAYS , FlushMode.ALWAYS )
  • consultar el caché de segundo nivel por la clave natural de una entidad dada
  • estrategias de concurrencia de caché a nivel de entidad
    (por ejemplo, Cache(usage = CacheConcurrencyStrategy.READ_WRITE) )
  • actualizaciones masivas versionadas a través de HQL
  • excluir campos de la comprobación de bloqueo optimista (por ejemplo, @OptimisticLock(excluded = true) )
  • bloqueo optimista sin versión (por ejemplo, OptimisticLockType.DIRTY , OptimisticLockType.DIRTY )
  • soporte para omitir (sin esperar) solicitudes de bloqueo pesimista
  • soporte para Java 8 Fecha y hora
  • soporte para multitenancy
  • soporte para entidades de auditoría (Envers)
  • soporte para búsqueda de texto completo (Hibernate Search)
  • soporte para bases de datos NoSQL (Hibernate OGM)

Si aún no está convencido, consulte la impresionante documentación que fue reescrita y preparada desde cero. Si tiene alguna pregunta, encontrará una respuesta en el foro oficial o en StackOverflow (hay más de 55 000 preguntas y respuestas allí, 10 veces más que todos los demás proveedores de JPA combinados).

Por todas estas razones, Hibernate es una muy buena opción para cuando quieres usar JPA.

JPA no es una implementación de JPA, ni MyBatis …
Puedes elegir entre:
JPA con una implementación (por favor hazlo).
O Implementación directamente (por favor no haga esto).

Las implementaciones de JPA son: Hibernate, Toplink, OpenJPA, EclipseLink.
Todos son (en su mayoría) equivalentes en términos de implementación de JPA (todos son 100% compatibles con JPA).

Algunos de ellos ofrecen adiciones:
* Auditoría y búsqueda de entidades (búsqueda de Hibernate, Envers for Hibernate).
* ORM gratuito a OXM (xml) (EclipseLink)
* Integración más fácil de escalabilidad / distribución / JTA (OpenJPA).

Finalmente, si su aplicación web está en un servidor JavaEE (Glassfish, WildFly, WAS, WebLo …) ese servidor JavaEE ya viene con una implementación JPA incorporada, así que solo tome esta.

Solo para dar más luz a lo que alguien escribió antes que yo, agregaría las siguientes opiniones (considerando que está pidiendo una opinión experta para una “aplicación web simple”, supondré que no es muy rentable, así que más sobre el lado novato (sin ofender):

  1. Debe comprender cuál es el objetivo de la aplicación que está creando:
  1. ¿Un servidor de aplicaciones JEE completo (como Glassfish, Wildfly / JBoss EAP / Websphere, Weblogic? Si es así, tendrá una implementación JPA totalmente integrada (es decir, dependiendo de la implementación puede encontrar Hibernate, Eclipselink, Toplink, OpenJPA) y, a veces, incluso un monitoreo adicional muy inteligente (desde la interfaz de administración del servidor de aplicaciones). Por lo tanto, no hay razón para ir diferente aquí. Aunque es posible, realmente no vale la pena (aunque también es muy propenso a errores) cambiar la implementación predeterminada de JPA en dicha aplicación servidor.
  2. Está implementando una especie de “microservicio” basado en Wildfly Swarm, Dropwizard, Springboot, Lagom … vaya con el valor predeterminado. Por lo general, recomiendan un enfoque JPA puro o un marco más obstinado.
  3. Estás construyendo todo desde cero. Se implementa en Tomcat / Jetty / Undertow / Grizzly y necesita algo de persistencia. En este caso, hay tantas posibilidades que … sería difícil hacer un consejo correcto. Teniendo en cuenta, como dije anteriormente, que usted es un novato en el campo, le recomendaría un enfoque JDBC (en caso de que sus necesidades sean realmente muy básicas o muy dependientes del dialecto de la base de datos) o, la mayoría de las veces, un enfoque JPA muy puro (con cualquier implementación que desee, porque en este nivel de uso son todos iguales. Personalmente, recomendaría hibernar, no hay una razón especial para eso, excepto su ubicuidad. Ser un novato con el que se encontrará se encontrará emite un soporte bastante rápido e hibernación, la documentación o el foro inteligente es lo mejor
  • Si bien JPA es un estándar (por lo que se implementa en todas las implementaciones de JPA …), para la mayoría de los casos más avanzados, tendrá que ir más allá del estándar (por ejemplo, JPA 1.0 ni siquiera permitió crear asociaciones de no-entidades, por lo que no podría tener una Lista o Lista ; todavía no tiene soporte para operaciones por lotes (por lo que miles de inserciones / actualizaciones / eliminaciones individuales siguen siendo un problema grave) y hasta hace poco tenía que tome una decisión muy correcta sobre lo que debe cargarse por adelantado (con entusiasmo) o más tarde (perezosamente) o se lo follarán en algún momento). Pero para una “aplicación web simple” este no debería ser el caso.
  • Entonces, en general … para una aplicación web simple, realmente no hace la diferencia (Hibernate, eclipselink, toplink, openjpa). De acuerdo con el estándar actual de JPA (2.1) y las últimas implementaciones, todas deberían poder servirle lo suficientemente bien. Y cuando las diferencias importen será tanto en el futuro, que se debe escribir un nuevo artículo.

    More Interesting

    ¿Cuál es el mejor marco web para crear un back office de juegos con MongoDB?

    ¿Cuál es la tasa máxima de solicitudes que puede manejar una aplicación web?

    Scala: ¿Qué buen marco puedo elegir para el desarrollo web?

    ¿Cuál es una buena estrategia para competir con una aplicación web ya existente y popular que está dentro del mismo nicho y tiene el mismo propósito general?

    ¿Qué aspectos de Node.js lo hacen adecuado para aplicaciones web en tiempo real?

    ¿Cuáles son los obstáculos para hacer que las aplicaciones web sean tan buenas como las aplicaciones nativas?

    ¿Cuál es la forma más rentable de implementar una aplicación Rails de tamaño pequeño a mediano?

    Con apertura en multisitio. ¿Cómo trabajar el generador de secuencia en el campo "número" en el objeto "cuenta.factura"?

    Cómo obtener todas las imágenes en una carpeta de un sitio web usando PHP

    ¿Cuáles son las mejores 'aplicaciones web' o extensiones para Chrome o Safari?

    ¿Se puede ganar dinero con aplicaciones automáticas cuantificadas?

    ¿Qué programadores contrato para crear un sitio web como IMDb?

    ¿Cuáles son algunos frameworks, bibliotecas o herramientas "en boga" entre los desarrolladores que nacen y / o se mantienen principalmente en la Europa mediterránea?

    ¿Por qué no se debe desarrollar un sitio web con el marco Struts? ¿Y por qué debería?

    Como programador de 'nivel intermedio' que solo trabaja en el backend de la aplicación web de una startup, ¿qué tan preocupado debería estar por las lagunas de seguridad que podría estar creando involuntariamente, incluso si soy capaz de acelerar las cosas rápidamente?