【问题标题】:Specifying field size of Map collection in grails DOM在 grails DOM 中指定 Map 集合的字段大小
【发布时间】:2011-09-04 18:50:24
【问题描述】:

我有一个 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 个字符的字符串。我在网上找不到任何相关文档,可能是因为我想不出任何好的关键字。 Map 和 Collection 是非常通用的术语!

谢谢,

基因

【问题讨论】:

    标签: hibernate grails grails-orm hibernate-mapping


    【解决方案1】:

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

    【讨论】:

    • 该死!我希望我可以在映射中指定一些神奇的属性来影响document_metadata 表的声明方式。
    • 您唯一能做的“魔术”是为 HashMap 类型添加一个自定义的 Hibernate 处理程序,但是,这将适用于所有哈希映射(包括 GORM 用于管理关系的那些)。
    【解决方案2】:

    只需对数据库运行 sql alter 命令就很容易了。这个alter命令的一个好地方是BootStrap,并带有一些检查表列定义是否正常的逻辑。 Grails 不会触及已创建的列。

    【讨论】:

    • 这个问题再次出现在我身上,当我执行手动ALTER TABLE 命令时,您的解决方案就像一个魅力;不太确定如何在 Bootstrap 中以独立于 DB 的方式实现这一点。
    猜你喜欢
    • 2013-09-27
    • 2017-06-30
    • 2013-03-27
    • 1970-01-01
    • 1970-01-01
    • 2012-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多