Класс домена Grails, Строковое поле TEXT и LONGTEXT

В классе домена Grails, как установить ограничение для строкового поля, чтобы его тип столбца MySQL был TEXT или LONGTEXT?

До сих пор мой лучший подход - установить размер ограничения:

myTextField(size:0..65535)

что приводит к TEXT

myTextField(size:0..2147483646)

приводит к LONGTEXT (2147483646 = 2 ^ 32/2 - 1 - 1)

Есть ли более чистый способ указать размер? В принципе, я хочу, чтобы весь диапазон TEXT или LONGTEXT не требовал жесткого кодирования множества значений размера.

Ответ 1

Вы можете объявить, что в закрытии отображения вашего класса домена:

static mapping = {
   myTextField type: 'text'
}

(См. Документация ORM DSL)

Ответ 2

Использование 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