Festlegen der Feldgröße der Kartensammlung in Grails DOM
-
22-10-2019 - |
Frage
Ich habe eine Domänenklasse von Grails 1.3.7, die so deklariert wird:
class Document {
String url
Map metadata = new HashMap()
static constraints = {
url(nullable:false, blank: false, maxSize: 2048)
metadata()
}
}
Das erzeugte Schema sieht so aus:
+-------------+--------------+------+-----+---------+----------------+
| 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 | |
+--------------+--------------+------+-----+---------+-------+
Ich frage mich, wie ich unterschiedliche Typen (insbesondere unterschiedliche Größe) für die Tabelle document_metadata angeben kann. Ich möchte in der Lage sein, Saiten länger als 255 Zeichen zu speichern. Ich konnte keine relevante Dokumentation online finden, möglicherweise weil ich keine guten Keywords finden konnte. Karte und Sammlung sind ziemlich generische Begriffe!
Vielen Dank,
Gen
Lösung
Die einzige Möglichkeit, die DDL für Ihre "Metadaten" zu beeinflussen, besteht darin, sie zu einer konkreten Domänenklasse zu machen. Die Verwendung von HashMap gibt Ihnen nicht die Möglichkeit, dies zu tun.
Andere Tipps
Es wäre ganz einfach, nur einen SQL Alter -Befehl in die Datenbank auszuführen. Ein guter Ort für diesen Änderungsbefehl wäre Bootstrap und mit einer Logik, die die Tabellenspaltendefinitionen überprüft, wie sie in Ordnung sind oder nicht. Grals berühren keine bereits erstellten Spalten.