en Grails, ¿Hay alguna forma de limitar el tamaño de la columna a la que se asigna la enumeración? En el siguiente ejemplo, me gustaría el tipo de columna para ser Char (2)Grails Enum Mapeo
enum FooStatus {
BAR('br'), TAR('tr')
final static String id
}
class Foo {
FooStatus status
static constraints = {
status(inList:FooStatus.values()*.id,size:2..2)
}
}
tanto INLIST y el tamaño no tiene ningún efecto cuando se exporta el esquema, el tipo de columna mantiene su valor por defecto (varch (255)) Tal vez podría hacer eso si defino un nuevo UserType. Alguna idea ?
Gracias -ken
Es bastante molesto que tenga que agregar para cada enumeración un tipo getter y setter y también lo declaro como "transitorio". Burt, ¿no sería un UserType personalizado una solución más elegante? – ken
Transient y getter/setter son opcionales si está bien con la configuración de la identificación de Enum y la conversión de la id a la instancia enum en el código de llamada. El cambio real es persistir en una Cadena en lugar de Enum (lo cual fue implícito por el uso de inList() ya que de todos modos eso no funcionaría con la Enum). Pero claro, un UserType personalizado debería funcionar. Querrá extraer cosas comunes en una clase base si lo hace más de una vez. Mi preferencia sería mantener todo en la clase de dominio si es posible, siempre y cuando los cambios no sean tan significativos. –
Burt, sí, tienes razón, quiero poder establecer y obtener la variable de estado como una enumeración y también poder guardar la base de datos, así el uso de la identificación en la enumeración. Me estoy inclinando más hacia un tipo de usuario personalizado algo a lo largo de mapping = {status type: EnumUserType} – ken