Разница между пустым и нулевым ограничениями
В чем разница между пустым и нулевым ограничениями?
У меня есть следующий класс
class Task {
String title
String notes
TekUser assignedTo
Date dueDate
TekEvent event
static constraints = {
title blank:false
notes blank: true , maxSize: 5000
assignedTo nullable:true
dueDate nullable:true
}
static belongsTo = TekEvent
}
и созданная таблица mysql имеет ноты, установленные как null, даже если я указал notes blank : true
Какой эффект имеет значение blank: true?
Ответы
Ответ 1
-
blank:true
означает, что поле принимает пустую строку или одну, состоящую только из пробелов в качестве допустимых значений. Например: ""
, " "
-
nullable:true
означает, что поле принимает null
как допустимое значение
Они могут использоваться вместе. Например:
title blank:false, nullable: true
Ответ 2
В то время как ответ aruizca правильный и описательный, я нашел это, читая книгу: " Программирование Grails" Берт Беквит.
Бланки против нулейВо многих случаях пустая строка и нуль эквивалент - нет установленного значения. Но HTTP-сообщения из Интернета POST-запросы браузера отправляют пустые строки для входов без значения. Это не относится к данным, отличным от HTTP, например, от других внешние клиенты, такие как веб-службы или во время тестирования, поэтому конвертирование пробелы для нулей для уровня HTTP помогут упростить проверку. В то время как были у него, мы также можем обрезать лишние пробелы из представленных значения.
Возможно, это не относится к вашему вопросу. Ответ Aruizca - это все, что вам нужно, но это может быть дополнительная информация о Blanks и Nulls.
Ответ 3
Другой ответ правильный, но для решения вашего вопроса:
Созданная таблица mysql имеет ноты, установленные как null, хотя я заданные примечания blank: true
Какой эффект имеет значение blank: true?
blank: false
защищает пустые значения (например, "," " и т.д.) от установки в этом поле. Это не имеет ничего общего с полем, имеющим ограничение NOT NULL
на mysql. Это произошло потому, что ограничения Grails по умолчанию равны nullable: false
для каждого поля, если вы явно не установили его в nullable: true
.