Как в доменном классе Grails установить ограничение для поля String, чтобы его тип столбца MySQL был TEXT или LONGTEXT?
Пока что мой лучший подход - установить размер ограничения:
myTextField(size:0..65535)
что приводит к ТЕКСТУ
myTextField(size:0..2147483646)
приводит к LONGTEXT (2147483646 = 2 ^ 32/2 - 1 - 1)
Есть ли более чистый способ указать размер? В основном мне нужен полный диапазон TEXT или LONGTEXT без необходимости жестко кодировать кучу значений размера.





Вы можете объявить, что при закрытии отображения вашего класса домена:
static mapping = {
myTextField type: 'text'
}
(См. Документация ORM DSL)
использование 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