41

在 Grails 域类中,如何设置 String 字段的约束,使其 MySQL 列类型为 TEXT 或 LONGTEXT?

到目前为止,我最好的方法是设置约束的大小:

myTextField(size:0..65535)

这导致文本

myTextField(size:0..2147483646)

结果为 LONGTEXT (2147483646 = 2^32 / 2 - 1 - 1)

有没有更简洁的方法来指定尺寸?基本上我想要完整的 TEXT 或 LONGTEXT 范围,而不必硬编码一堆大小值。

4

2 回答 2

98

您可以在 Domain 类的映射闭包中声明:

static mapping = {
   myTextField type: 'text'
}

(参见ORM DSL 文档

于 2009-01-11T21:42:59.957 回答
5

使用 sqlType 将允许您进行更细粒度的约束

Class Foo{
    String myTxtAsVarchar
    String myTxtAsText
    String myTxtAsLtext

    static mapping = {
       myTxtAsVarchar  sqlType: 'varchar(255)'
       myTxtAsText     sqlType: 'text'
       myTxtAsLtext    sqlType: 'longText' 
    }
    /*applying constraint on DB end + on Domain model(scaffolding/Validation)*/
    static constraints = {
           myTxtAsVarchar  size: 2..255
           myTxtAsText     size: 2..15000
     }
}

使用 SQL 类型还提供了实际的 Blob 类型(默认情况下链接到 tinyBlob 的字节类型)

此处详细介绍了更多映射:https ://grails.github.io/grails-doc/latest/ref/Database%20Mapping/column.html

于 2016-03-26T14:26:28.447 回答