Grails — сохранение отклоненного значения null, даже если параметр инициализирован

#grails #null #save #grails-domain-class #grails-controller

#grails #null #Сохранить #grails-domain-class #grails-контроллер

Вопрос:

Я довольно новичок в Grails и столкнулся с (вероятно, глупой) проблемой. Когда я пытаюсь сохранить экземпляр домена, он терпит неудачу с ... on field 'deviceUsages[0].start': rejected value [null]...

Это действие, при котором оно завершается с ошибкой:

 def save() {
            def user=params.remove('user.id')
            def deviceInstance=new Device(params)
            DeviceUsage du = new DeviceUsage(device: deviceInstance, user: User.get(user), start: new Date(), end: null)
            if(user){
                deviceInstance.addToDeviceUsages(du)
            }

            if (!deviceInstance.save(flush: true)) {
                deviceInstance.errors.each {
                    println it
                }

                render(view: "create", model: [deviceInstance: deviceInstance])
                return
            }

            du.save()
            flash.message = message(code: 'default.created.message', args: [message(code: 'device.label', default: 'Device'), deviceInstance.id])
            redirect(action: "show", id: deviceInstance.id)
        }
 

Как вы можете видеть, ‘start’ явно инициализируется новой датой…
Рассматриваемые классы домена следующие:

 class Device {

    String name
    String description
    Date created = new Date()
    Date deactivated
    User currentUser

    static hasMany = [
        deviceUsages: DeviceUsage
    ]

    static constraints = {
        name(nullable:false, blank:false)
        description(nullable:false, blank:true)
        created(nullable:false, display:false)
        deactivated(nullable:true)
        currentUser(nullable:true)
    }
 

и

 class DeviceUsage implements Serializable{
    Date start
    Date end

    static belongsTo = [
        device: Device,
        user: User
    ]

    static constraints = {
        start(nullable:false)
        end(nullable:true)
    }

    static mapping = {
        id composite: ['device', 'user']
        version false
    }
 

Спасибо за любую помощь

Ответ №1:

Ну, мне удалось это решить… По-видимому new DeviceUsage(device: deviceInstance, user: User.get(user), start: new Date(), end: null) , по какой-либо причине start null остается пустым, поэтому добавление du.start = new Date() в следующей строке исправило это…