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

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top