Доменный класс Grails, строковое поле TEXT и LONGTEXT - PullRequest
36 голосов
/ 11 января 2009

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

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

myTextField(size:0..65535)

, что приводит к тексту

myTextField(size:0..2147483646)

Результаты в LONGTEXT (2147483646 = 2 ^ 32/2 - 1 - 1)

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

Ответы [ 2 ]

91 голосов
/ 12 января 2009

Вы можете объявить это в закрытии сопоставления вашего класса Домена:

static mapping = {
   myTextField type: 'text'
}

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

5 голосов
/ 26 марта 2016

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...