在grails DOM中指定Map集合的字段大小

时间:2011-09-04 18:50:25

标签: hibernate grails gorm hibernate-mapping

我有一个Grails 1.3.7域类,声明如下:

class Document {
    String url

    Map metadata = new HashMap()

    static constraints = {
        url(nullable:false, blank: false, maxSize: 2048)
        metadata()
    }
}

生成的架构如下所示:

+-------------+--------------+------+-----+---------+----------------+
| 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    |       |
+--------------+--------------+------+-----+---------+-------+

我想知道如何为document_metadata表指定不同的类型(具体地说,不同的大小)。我希望能够存储超过255个字符的字符串。我在网上找不到任何相关文档,可能是因为我无法想出任何好的关键词。地图和收藏是非常通用的术语!

谢谢,

基因

2 个答案:

答案 0 :(得分:2)

您能够影响“元数据”的DDL的唯一方法是使其成为具体的域类。使用HashMap不会让你这样做。

答案 1 :(得分:2)

将sql alter命令运行到数据库会非常容易。这个alter命令的一个好地方是BootStrap,它有一些逻辑可以检查表列定义是否合适。 Grails不会触及已创建的列。