在Grails(或者可能是Hibernate)中,可以检查域模型对象是否是在代码中创建的(即:它是一个尚未保存到数据库的新对象),或者是否是通过从数据库?
答案 0 :(得分:5)
您可以使用方法isAttached - http://grails.org/doc/latest/ref/Domain%20Classes/isAttached.html。
在调用.save()之前,新创建的对象不会附加到当前会话,从数据库加载的对象将附加到会话。
答案 1 :(得分:1)
在Grails 1.3.9中isAttached()
在Domain类自定义验证器中使用时似乎不起作用。
我在我的所有域对象中使用Date dateCreated
grails magic,并且对null
有效,请检查验证器:
date(blank: false, nullable: false, validator: { val, obj, errors ->
// Validation only for new objects
if (obj.dateCreated == null && obj.date <= new Date()) {
errors.rejectValue('date', 'date.before.now');
}
}
)
答案 2 :(得分:0)
在大多数情况下,域实例在持久化时将被分配一个id。因此,如果id属性为null,则尚未将其保存到数据库中。如果它来自数据库,则实例将具有非空的id。