Especificar el tamaño del campo de la colección de mapas en grils DOM
-
22-10-2019 - |
Pregunta
Tengo una clase de dominio Grails 1.3.7 que se declara así:
class Document {
String url
Map metadata = new HashMap()
static constraints = {
url(nullable:false, blank: false, maxSize: 2048)
metadata()
}
}
El esquema que se genera se ve así:
+-------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+--------------+------+-----+---------+----------------+
| id | bigint(20) | NO | PRI | NULL | auto_increment |
| url | longtext | NO | | NULL | |
+-------------+--------------+------+-----+---------+----------------+
+--------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------+--------------+------+-----+---------+-------+
| metadata | bigint(20) | YES | | NULL | |
| metadata_idx | varchar(255) | YES | | NULL | |
| metadata_elt | varchar(255) | NO | | NULL | |
+--------------+--------------+------+-----+---------+-------+
Me pregunto cómo puedo especificar diferentes tipos (específicamente, tamaño diferente) para la tabla document_metadata. Me gustaría poder almacenar cuerdas de más de 255 caracteres. No pude encontrar ninguna documentación relevante en línea, posiblemente porque no se me ocurrió ninguna buena palabra clave. ¡El mapa y la colección son términos bastante genéricos!
Gracias,
Gene
Solución
La única forma en que podrá influir en el DDL para sus "metadatos" es convertirlo en una clase de dominio concreto. Usar hashmap no te dará la capacidad de hacerlo.
Otros consejos
Sería bastante fácil ejecutar un comando SQL ALTER a la base de datos. Un buen lugar para este comando ALTER sería Bootstrap y con alguna lógica que verifique las definiciones de la columna de la tabla que están bien o no. Los gracios no tocarán las columnas ya creadas.