Tengo una base de datos existente a la que ahora me estoy conectando usando hibernate. No puedo cambiar los datos en él en este momento y tengo todo funcionando aparte de una sola columna.Hibernate Enum mapping utilizando anotaciones
que tienen una columna de estado que tiene los valores:
- nueva
- enviado por correo
- en
- cabo
y la columna se asigna de la siguiente manera:
@Column(name = "STATUS", nullable = false, length = 50)
@Enumerated(EnumType.STRING)
private TeamMemberStatus status;
REALMENTE me gustaría (por razones de aplicación) tener esta columna asignada como Java Enum (TeamMemberStatus), pero debido al hecho de que 'nueva' es una palabra clave en Java no puedo tener eso como un miembro enum.
Si tengo la enumeración de contstants NEW, MAILED, IN y OUT hibernate falla porque dentro de EnumType hace un Enum.valueOf().
¿Hay alguna forma de mapear esto en mi Enum sin tener que escribir un tipo de usuario complejo?
- el contenido agregado
Mi Enum como esto:
public enum TeamMemberStatus {
NEW, MAILED, IN, OUT
}
es una enumeración de Java válido, pero que no coincida con el caso de la base de datos. Si cambio para que coincida con la base de datos como:
public enum TeamMemberStatus {
new, mailed, in, out
}
No se compilará como 'nuevo' es una palabra reservada de Java.
Supongo que quiere cambiar los datos en la base de datos. Algo así como actualizar TABLE establecer estado = superior (estado). No puedo hacer eso ya que romperá las aplicaciones existentes que hablan con esos datos esperándolo como un valor en minúsculas. – stevemac
@stevemac Updated –
Eso es lo que resolví al final, basicamente almacenamos la cadena internamente y la asignamos desde/a la enumeración cuando se llama a los get/set. Tendrá que hacer en el corto plazo, hasta que pueda obtener todas las aplicaciones actualizadas para usar constantes en mayúsculas. – stevemac