#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()
в следующей строке исправило это…