Grails:检查域模型对象是在代码中创建还是从数据库加载

时间:2014-02-04 20:12:18

标签: grails domain-model

在Grails(或者可能是Hibernate)中,可以检查域模型对象是否是在代码中创建的(即:它是一个尚未保存到数据库的新对象),或者是否是通过从数据库?

3 个答案:

答案 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。