Hibernate proporciona la anotación @Enumerated
que admite dos tipos de mapeo Enum
utilizando ORDINAL
o STRING
. Cuando mapeamos usando EnumType.STRING
, toma el "nombre" de la Enum
y no la toString()
representación de Enum. Este es un problema en escenarios donde la columna de la base de datos consta de un solo carácter. Por ejemplo, tengo la siguiente enumeración:Hibernate @Enumerated mapping
public enum Status{
OPEN{
@Override
public String toString(){
return "O";}
},
WAITLIST{
@Override
public String toString(){
return "W";}
},
COMPLETE{
@Override
public String toString(){
return "C";}
}
}
Cuando persisto la enumeración Status.OPEN
usando @Enumerated(EnumType.STRING)
, el valor que Hibernate intenta almacenar en la base de datos está abierta. Sin embargo, mi columna de base de datos consta de un solo carácter y, por lo tanto, arroja una excepción.
Una forma de superar este problema es cambiar el tipo de enumeración para contener caracteres individuales (como STATUS.O
, en lugar de STATUS.W
STATUS.OPEN
, STATUS.WAITLIST
). Sin embargo, esto reduce la legibilidad. ¿Alguna sugerencia para preservar la legibilidad, así como mapear el Enum en una sola columna de caracteres?
Gracias.
¿Alguien ha utilizado la solución del enlace anterior y ha podido hacer el mapeo enum? Estoy usando Hibernate 3.6.7 y no tengo el método TypeFactory.basic. ¿Algún indicio de cómo debo seguir adelante? – yousafsajjad
El enlace a un artículo no es el formato correcto para una respuesta. – Arashsoft