example allocationsize java hibernate jpa orm hibernate-5.x

java - allocationsize - ¿Qué hay de nuevo en Hibernate ORM 5?



hibernate search jgroups (3)

Acabo de ver que el cuarto candidato fue lanzado para Hibernate 5. ¿Qué hay de nuevo en 5 en comparación con versiones anteriores?


Hay una larga lista de cosas que han cambiado en Hibernate 5:

  1. Nueva API de arranque para que podamos arrancar un entorno JPA mediante programación sin la necesidad de un archivo persistence.xml .

  2. A partir de 5.0 Hibernate Spatial es parte del proyecto Hibernate, por lo que también podemos manejar datos SIG.

  3. Los tipos de fecha y hora de Java 8 son compatibles con las asignaciones de modelo de dominio. La asignación entre los tipos estándar de fecha / hora de SQL y los tipos de clase de fecha / hora de Java 8 admitidos es la siguiente;

    • FECHA: java.time.LocalDate
    • TIME: java.time.LocalTime , java.time.OffsetTime
    • TIMESTAMP: java.time.Instant , java.time.LocalDateTime , java.time.OffsetDateTime y java.time.ZonedDateTime
  4. El mecanismo de mejora del código de bytes fue rediseñado desde cero, e Hibernate cuenta con un complemento Maven y Gradle. Hay tres aspectos principales que podemos mejorar con la instrumentación de bytecode:

    • Inicialización diferida: los campos se pueden declarar como LAZY y se recuperarán solo cuando se acceda por primera vez.

    • Comprobación sucia: las entidades se mejoran para que puedan realizar un seguimiento de todas las propiedades que se modifican después de cargarse en un contexto de persistencia.

    • Asociaciones bidireccionales: es posible sincronizar ambos lados de una asociación bidireccional automáticamente, incluso si el desarrollador solo actualiza un solo lado.

  5. Las API nativas de Hibernate ( Session , etc.) se han actualizado para usar tipos genéricos. No es necesario emitir al buscar entidades.

  6. Hibernate 5.0 extiende esto a un conjunto más amplio de tipos (por ejemplo, UUID ).

  7. Caché de segundo nivel por referencia. Esta característica permite el almacenamiento directo de referencias de entidad en el caché de segundo nivel para entidades inmutables.

  8. Comenzando con Hibernate 5.0, tenemos una Guía del usuario completamente nueva que fue escrita desde cero.

Hibernate 5.1 agrega las siguientes características:

  1. Ahora puede unir entidades no relacionadas en consultas JPQL y HQL
  2. Carga de múltiples entidades por identificador

Hibernate 5.2 agrega soporte para:

  1. Java 1.8, por lo que ahora puede usar Query.stream()
  2. La Session Hibernate extiende EntityManager para que pueda acceder a todos los métodos JPA directamente desde una Session
  3. Soporte para JCache
  4. Tamaño de lote a nivel de sesión
  5. Configuración de zona horaria global (por ejemplo, UTC) para Timestamp de Timestamp y Time
  6. Sugerencia de paso distinta
  7. Análisis más eficiente de JPQL y HQL de valores constantes
  8. La optimización de la transacción local de recursos hibernate.connection.provider_disables_autocommit .
  9. Mejor manejo de los literales de Criteria API .

Se han agregado / mejorado algunas características interesantes en Hibernate 5.x. Echa un vistazo rápido.

1. Búsqueda de hibernación

Hibernate Search indexa de forma transparente sus objetos y ofrece una búsqueda rápida de texto completo y geolocalización. La facilidad de uso y la fácil agrupación son fundamentales.

  • Búsqueda de texto completo para entidades: búsqueda por aproximación (búsqueda difusa)
  • Cluster-friendly: ofrece varias estrategias de agrupación fáciles de configurar
  • Facetado y geolocalización: las entidades geolocalizadas son tan fáciles como @Spatial

Para más detalles sobre Hibernate Search, vea esto.

2. Validador de hibernación

Hibernate Validator viene con un puñado de reglas de validación incorporadas como Correo electrónico, Longitud, NotBlank, etc.

Exprese las reglas de validación de forma estandarizada utilizando restricciones basadas en anotaciones y aproveche la integración transparente con una amplia variedad de marcos.

Para más detalles sobre el Validador de Hibernate, vea esto.

3. Soporte mejorado de Java 8

Los tipos de datos de fecha / hora de Java 8 (JSR 310) son compatibles y se pueden validar a través de @Past y @Future. También los tipos opcionales y JavaFX son compatibles a través de un ValidatedValueUnwrapper mejorado.

4. Hibernate OGM

Acabo de lanzar la primera versión estable.

5. API de Bootstrapping

Nueva API de arranque: mejor determinismo, mejor integración

Algunas otras cosas:

  • Soporte de escaneo para uso que no sea JPA
  • NamingStrategy se ha eliminado en favor de una API mejor diseñada
  • Capacidad para manejar tipos Java adicionales para atributos de identificación marcados como GenerationType # AUTO. Soporte incorporado para Número y UUID. Ampliable a través de la nueva extensión org.hibernate.boot.model.IdGeneratorStrategyInterpreter.
  • Además, el soporte para AttributeConverters se ha ampliado y se ha realizado más plenamente

Consulte la hoja de ruta de Hibernate ORM para obtener más detalles.


Hay 5 nuevas características en Hibernate 5

1. Clases de soporte de la API de fecha y hora como BasicTypes La nueva API de fecha y hora fue uno de los cambios más esperados en Java 8. El antiguo java.util.Date tiene muchos problemas que finalmente se solucionaron.

Desafortunadamente, JPA 2.1 e Hibernate 4 no le brindan soporte directo. Pero eso no es un gran problema. Solo se necesitan unas pocas líneas de código para implementar un AttributeConverter que asigna un LocalDate.

Pero obviamente, el soporte explícito como BasicType es aún mucho mejor. Hibernate lo implementó en la versión 5.0. Desde entonces, no necesita anotaciones ni convertidores adicionales para mantener las clases de la API de fecha y hora. Puede usarlos de la misma manera que cualquier otro tipo de atributo compatible.

2. Obtenga los resultados de la consulta como una transmisión Presentando un nuevo método para darle el resultado de su consulta, ya que una transmisión no suena como algo importante. Pero el método de transmisión de la interfaz de consulta de Hibernate proporciona un beneficio adicional que lo hace especialmente interesante para grandes conjuntos de resultados. Obtiene el conjunto de resultados en varios lotes y utiliza la implementación ScrollableResults de Hibernate para desplazarse por él. Este enfoque es perfecto si utiliza un Stream para procesar los registros del conjunto de resultados uno por uno y lo ayuda a implementar su caso de uso de manera eficiente.

Puede usar el nuevo método desde Hibernate 5.2 para obtener los resultados de su consulta. El siguiente fragmento de código muestra un ejemplo simple que selecciona todas las entidades del Libro de la base de datos y las procesa como Stream.

3. Obtenga múltiples entidades por su clave primaria

Obtener múltiples entidades por su ID es un caso de uso muy común. La mayoría de los desarrolladores lo implementan con un bucle que llama al método de búsqueda del EntityManager para cada clave primaria o con una consulta JPQL que verifica todos los valores de clave primaria en una cláusula IN. La primera opción requiere que Hibernate realice una consulta en la base de datos para cada clave primaria. Eso puede crear grandes problemas de rendimiento. El segundo le permite buscar todas las entidades con una consulta y obviamente es la mejor opción.

Hibernate 5.1 introdujo una tercera opción que evita los problemas de la primera y es más fácil de usar que la segunda. La nueva interfaz MultiIdentifierLoadAccess proporciona una opción cómoda para cargar múltiples entidades con una consulta. Solo necesita llamar al método byMultipleIds en la sesión de Hibernate para obtener una interfaz MultiIdentifierLoadAccess y proporcionar una lista de valores de clave principal para el método multiLoad. La implementación de Hibernate también proporciona una ventaja adicional: divide grandes listas de valores clave primarios en múltiples lotes. Esto a veces es necesario porque algunas bases de datos limitan el número de elementos en una cláusula IN.

4. Unir entidades no asociadas en una consulta

Puede unir fácilmente asociaciones mapeadas entre entidades en consultas JPQL. La asignación ya proporciona las condiciones de unión requeridas, y no necesita proporcionarlas en su consulta.

Pero, ¿qué pasa con las entidades que asignan tablas de bases de datos asociadas pero no tienen asociación asignada?

Y esa no es una pregunta retórica.

La mayoría de los modelos de entidad no asignan todas las asociaciones posibles. Solo asignan los que parecen proporcionar valor en el modelo de dominio y no aquellos en los que 2 tablas de la base de datos (aparentemente por accidente) almacenan la misma clave foránea. También sucede con bastante frecuencia que una asociación de muchos con muchos registros en el lado múltiple no se mapea con Hibernate. El riesgo de que alguien llame al promotor de la asociación y obtenga varios cientos o miles de entidades es demasiado alto.

Eso está totalmente bien siempre que solo mire el modelo de dominio. Probablemente no necesite estas asociaciones en el modelo. Pero eso no significa que no los necesite en una de sus consultas JPQL.

Si ese es el caso, tiene 3 opciones:

1 Modele la asociación entre las entidades o
2 Use una combinación cruzada en su consulta JPQL que podría crear problemas de rendimiento o
3 Utilice la cláusula JOIN patentada de Hibernate. Prefiero la opción 3. Es la más fácil y natural.

Desde Hibernate 5.1, puede usar una sintaxis similar a SQL para unir entidades sin una asociación modelada.

5. @ Anotaciones repetibles

Las anotaciones repetibles son uno de los cambios más pequeños en Java 8. Le permite anotar una clase, atributo o interfaz con la misma anotación varias veces. Un ejemplo típico de JPA en el que desea hacer eso es definir múltiples consultas con nombre para una entidad.

Hasta ahora, tenía que anotar su entidad con una anotación @NamedQueries que contenía una serie de anotaciones @NamedQuery. Lo molesto de eso es que la anotación @NamedQueries es solo un contenedor. No proporciona ningún valor por sí solo. Desde Hibernate 5.2, ya no tienes que hacer eso. Al menos no siempre que use la versión de Hibernate de la anotación org.hibernate.annotations.NamedQuery. @NamedQuery y muchas otras anotaciones de Hibernate ahora son repetibles y se pueden asignar varias veces. Como puede ver en el siguiente fragmento de código, eso hace que el código sea más fácil de leer y es mucho más cómodo de usar.

Creadit / Fuente : https://www.thoughts-on-java.org/5-new-features-hibernate-5-every-developer-know/