database - Cómo ajustar restricciones/mapeo DB para Map dentro de la clase de dominio grails
mapping hibernate-mapping (2)
Siguiente clase de dominio Grails:
class MyClass {
Map myMap
}
Ahora, para myMap, Grails crea automáticamente una nueva tabla para los elementos en el mapa. Sin embargo, si agrego elementos que son demasiado largos (por ejemplo, 1024 caracteres), aparece un error de DB.
¿Puedo de alguna manera decirle a Grails que haga que la columna respectiva en la tabla de myMap sea lo suficientemente grande como para permitir cadenas más grandes, o tengo que hacerlo manualmente en la base de datos?
Ya lo intenté
static constraints = {
myMap(maxSize:1024)
}
que no funciona (como se esperaba porque maxSize debería referirse a los valores del mapa y no al propio mapa).
Si no es por restricciones, tal vez haya una forma de hacerlo a través de
static mapping { ... }
?
¿Qué está tratando de lograr? ¿Siempre hay la misma cantidad de cosas en el mapa? Si existe, debe definir esas propiedades en su clase.
Puede ver el problema con su enfoque actual: no hay forma de averiguar qué podría haber en el mapa hasta el tiempo de ejecución, así que, ¿cómo es posible que Grails cree columnas para él? Me sorprende que incluso funcionó para comenzar ...
Un enfoque alternativo que utilicé con éxito fue llevar el mapa a una colección de una clase de dominio colaborador.
class DynaProperty {
String name
String value
static belongsTo = MyClass
static constraints = {
value(maxSize:4000) //Or whatever number is appropriate
}
}
Y luego en MyClass:
class MyClass {
static hasMany = [dynaProperties:DynaProperty]
}
Esto es casi un mapa, y le da la capacidad de usar buscadores dinámicos para obtener una entrada individual.