A menudo es útil tener un campo en un DAO cuyo valor proviene de una enumeración de Java. Un ejemplo típico es un DAO de inicio de sesión donde generalmente tiene un campo que caracteriza al usuario como "NORMAL" o "ADMIN". En Hibernate, me gustaría utilizar los siguientes 2 objetos para representar esta relación en un (semi) typesafe manera:Enumeraciones en Hibernate
class User {
String username;
String passwd;
UserType type;
}
class UserType {
private enum Type {ADMIN, NORMAL};
private String type;
//Setters/Getters for Hibernate
public void setType(String type);
public String getType();
//Setters/Getters for user
public void setUserType(UserType.Type t);
public UserType.Type getUserType();
public static UserType fromType(UserType.Type t);
}
Esto funciona, pero me parece que la clase UserType ungly y que requieren demasiada burocracia sólo para almacenar un par de valores Idealmente, Hibernate debería admitir campos enum directamente y crearía una tabla adicional para almacenar los valores de enumeración.
Mi pregunta es: ¿hay alguna manera de asignar directamente una clase de enumeración en Hibernate? Si no, ¿es mi patrón para representar las enumeraciones lo suficientemente bueno o me falta algo? ¿Qué otros patrones usa la gente?
¿Podría @Enumerated (EnumType.ORDINAL) cuál mapa a int más eficiente? –
problably es más eficiente, pero me gustaría poner dinero en no poder medir la diferencia en un sistema real. EnumType.ORDINAL es el valor predeterminado si solo hace @Enumerated. Creo que la mayoría de las personas (especialmente los DBA) tienden a preferir el nombre enum en el DB. –
¿Cómo puedo cambiar la longitud de la columna para estas enumeraciones? Intenté agregar la anotación Columna pero eso no se cumple? –