database grails mapping hibernate-mapping grails-domain-class

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.