(Quick Reference)

nullable

Purpose

Allows a property to be set to null.

As of Grails 8, an unconstrained persistent property is nullable by default, aligning Grails with the rest of the JVM persistence/validation ecosystem (JPA/Hibernate, Spring Data, Micronaut Data and Jakarta Bean Validation). Declare nullable: false to make a property required. To restore the legacy required-by-default behaviour for an application, set grails.gorm.default.nullable to false:
grails-app/conf/application.yml
grails:
    gorm:
        default:
            nullable: false

The equivalent in grails-app/conf/application.groovy:

grails-app/conf/application.groovy
grails.gorm.default.nullable = false

Examples

age nullable: true

Description

Set to true if the property allows null values.

This constraint influences schema generation.

Error Code: className.propertyName.nullable

Web requests resulting from form submissions will have blank strings, not null, for input fields that have no value. Keep this in mind when doing mass property binding to properties that are not nullable. The default behavior is such that a blank string will not validate for nullable: false since the data binder will convert blank strings to null. This includes empty strings and blank strings. A blank string is any string such that the trim() method returns an empty string. To turn off the conversion of empty strings to null set the grails.databinding.convertEmptyStringsToNull property to false in application.groovy. See the data binding section for more details on data binding.
grails-app/conf/application.groovy
// the default value for this property is true
grails.databinding.convertEmptyStringsToNull = false

// ...

Or the equivalent in grails-app/conf/application.yml:

grails-app/conf/application.yml
// the default value for this property is true
grails:
    databinding:
        convertEmptyStringsToNull: false

// ...