Разница между пустым и нулевым ограничениями

В чем разница между пустым и нулевым ограничениями?

У меня есть следующий класс

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.