Hibernate
Tutorial Hibernate: Enums en Hibernate
Hibernate enums: enumeraciones y uso. Domina el uso de enumeraciones en Hibernate mediante ejemplos prácticos y detallados.
Aprende Hibernate GRATIS y certifícateIntroducción
En Hibernate, los enums
son un recurso valioso para modelar atributos que representan un conjunto fijo de constantes, como estados, categorías, y roles, entre otros. Hibernate permite mapear enums
a columnas en la base de datos de una manera eficiente y segura respecto a tipos, mediante la etiqueta @Enumerated
. Existen principalmente dos estrategias para mapear un enum
: mediante su nombre (EnumType.STRING
) o mediante su ordinal (EnumType.ORDINAL
).
Mapeo de enum
utilizando el nombre (EnumType.STRING
)
Esta estrategia mapea el enum
a una columna de base de datos almacenando el nombre de las constantes del enum
. Es la opción recomendada porque hace que la base de datos sea más legible y el código sea más resistente a cambios en el orden de las constantes en el enum
.
import jakarta.persistence.*;
@Entity
public class Tarea {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String descripcion;
@Enumerated(EnumType.STRING)
private EstadoTarea estado;
// Getters y setters
}
enum EstadoTarea {
PENDIENTE,
EN_PROGRESO,
COMPLETADA
}
En este ejemplo, el atributo estado
de la clase Tarea
es un enum
que representa el estado de una tarea. Al usar @Enumerated(EnumType.STRING)
, Hibernate mapeará este campo a una columna de texto en la base de datos, guardando los valores como “PENDIENTE”, “EN_PROGRESO”, o “COMPLETADA”.
- Ventaja: La legibilidad y mantenibilidad son las principales ventajas, ya que los nombres de las constantes suelen ser autoexplicativos y el impacto de cambiar el orden o insertar nuevas constantes es mínimo.
- Desventaja: El uso de cadenas puede resultar en un mayor consumo de espacio en la base de datos comparado con los valores enteros.
Mapeo de enum
utilizando el ordinal (EnumType.ORDINAL
)
Es la estrategia predeterminada .Esta estrategia mapea el enum
a una columna de base de datos almacenando la posición ordinal de las constantes del enum
(comenzando en 0). Aunque esta opción puede ser más eficiente en términos de almacenamiento, es menos legible y puede causar problemas si el orden de las constantes en el enum
cambia.
import jakarta.persistence.*;
@Entity
public class Producto {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String nombre;
@Enumerated(EnumType.ORDINAL)
private CategoriaProducto categoria;
// Getters y setters
}
enum CategoriaProducto {
ELECTRONICA,
ROPA,
ALIMENTOS
}
En este ejemplo, el atributo categoria
de la clase Producto
es un enum
que representa la categoría de un producto. Utilizando @Enumerated(EnumType.ORDINAL)
, Hibernate mapeará este campo a una columna numérica en la base de datos, almacenando los valores como 0 para ELECTRONICA, 1 para ROPA, y 2 para ALIMENTOS.
- Ventaja: El principal beneficio es la eficiencia en el almacenamiento, ya que los números enteros ocupan menos espacio que las cadenas.
- Desventaja: El principal inconveniente es la falta de claridad en la base de datos (ver números en lugar de nombres significativos) y el problema de mantenimiento si el orden de las constantes en el enum cambia o si se insertan nuevas constantes entre las existentes, lo que puede llevar a inconsistencias de datos.
Consideraciones adicionales
Es importante tener en cuenta que el uso de EnumType.ORDINAL
puede llevar a errores si se modifican los enums
añadiendo, eliminando o reordenando constantes. Por lo tanto, se recomienda utilizar EnumType.STRING
para una mayor flexibilidad y mantenibilidad del código.
Además, es posible personalizar aún más el mapeo de enums
utilizando la anotación @jakarta.persistence.AttributeConverter
, lo cual permite definir una lógica de conversión específica entre la representación del enum
en la aplicación y la columna correspondiente en la base de datos.
Ejercicios de esta lección Enums en Hibernate
Evalúa tus conocimientos de esta lección Enums en Hibernate con nuestros retos de programación de tipo Test, Puzzle, Código y Proyecto con VSCode, guiados por IA.
Consultas JPQL avanzadas
Configuración con JPA
Tipos de datos personalizados
Consultas Criteria avanzadas
Operaciones en cascada
Anotaciones JPA
Asociación Many To One
Funciones en consultas JPQL
Asociación Many To Many entre Actor y Pelicula
Asociación One To Many entre Curso y Estudiante
Tipos de datos básicos
Consultas Criteria básicas
Asociación Many To Many
CRUD de entidades con asociaciones
Optimización de asociaciones con carga lazy
Asociación One To Many
Configuración con Maven
Asociación One To One
CRUD en Hibernate
Operaciones en cascada
Introducción a Hibernate
Atributos de tipo enum en entidades JPA
Carga de asociaciones en consultas con EntityGraph
Configuración con Gradle
Asociación One To One entre Libro y Resumen
Asociación One To Many
Asociación Many To Many
Creación de entidades
Ciclo de vida de una entidad
Consultas JPQL básicas
Carga de asociaciones en consultas con EntityGraph y anotaciones
Tipos de datos embebidos
Asociación Many To One entre Paciente y Clinica
Asociación Many To One
Optimización de consultas con DTOs
Atributos @Transient en entidades
Asociación One To One
Todas las lecciones de Hibernate
Accede a todas las lecciones de Hibernate y aprende con ejemplos prácticos de código y ejercicios de programación con IDE web sin instalar nada.
Introducción A Hibernate
Introducción Y Entorno
Configuración Hibernate Con Gradle
Introducción Y Entorno
Configuración Hibernate Con Maven
Introducción Y Entorno
Configuración Hibernate Con Jpa
Introducción Y Entorno
Tipos De Datos En Hibernate
Entidades Jpa Y Tipos De Datos
Atributos @Transient En Entidades
Entidades Jpa Y Tipos De Datos
Enums En Hibernate
Entidades Jpa Y Tipos De Datos
Tipos De Datos Embebidos
Entidades Jpa Y Tipos De Datos
Crud En Hibernate
Entidades Jpa Y Tipos De Datos
Ciclo De Vida De Una Entidad
Entidades Jpa Y Tipos De Datos
Creación De Entidades Jpa
Entidades Jpa Y Tipos De Datos
Asociación One To One
Asociaciones Entre Entidades
Asociación One To Many
Asociaciones Entre Entidades
Asociación Many To One
Asociaciones Entre Entidades
Asociación Many To Many
Asociaciones Entre Entidades
Operaciones En Cascada
Asociaciones Entre Entidades
Consultas Jpql Básicas
Consultas Hql Y Jpql
Consultas Jpql Avanzadas
Consultas Hql Y Jpql
Funciones En Consultas Jpql
Consultas Hql Y Jpql
Consultas Criteria Básicas
Api Criteria De Jpa
Consultas Criteria Avanzadas
Api Criteria De Jpa
Carga De Asociaciones En Consultas Con Entitygraph
Api Entitygraph
Carga De Asociaciones En Consultas Con Entitygraph Y Anotaciones
Api Entitygraph
Optimización De Consultas Con Dtos
Optimización
Optimización De Asociaciones Con Carga Lazy
Optimización
Certificados de superación de Hibernate
Supera todos los ejercicios de programación del curso de Hibernate y obtén certificados de superación para mejorar tu currículum y tu empleabilidad.
En esta lección
Objetivos de aprendizaje de esta lección
- Comprender la importancia de los
enums
para modelar atributos con un conjunto fijo de constantes en Hibernate. - Aprender a mapear
enums
en Hibernate utilizando la etiqueta@Enumerated
. - Diferenciar entre las dos estrategias de mapeo de
enums
: por nombre (EnumType.STRING
) y por ordinal (EnumType.ORDINAL
). - Entender por qué mapear
enums
por nombre es generalmente la opción recomendada.