Grails,比较两个对象?

时间:2012-11-15 08:42:33

标签: grails groovy

我有一个客户端对象。

class Client{
String firstName
String lastName
String middleName
}

然后我有一个母亲不能与父亲相等的形式。哪个验证器更适合比较客户端?甚至还有区别吗?我已经尝试了两种并且它们有效,但我不太确定它是否只是巧合。我也错了。如何比较两个对象?有什么建议吗?

val.id == obj.father.idval == obj.father

class Form{
Client mother
Client father

static constraints = {
mother (nullable:true, validator: { val, obj ->
            if(mother equals father){
                return ["invalid.motherCannotBeEqualFather.label"]  
            }
        })
}
}

1 个答案:

答案 0 :(得分:2)

val == obj.father

将导致val.equals(obj.father),因为Groovy重载==。这样做的默认行为是简单地检查引用相等性,这可能是危险的。 Hibernate将尝试确保平等(参见Fabiano的链接),但它可能不可靠。

val.id == obj.father.id

确保两个对象表示与域对象关联的数据库表中的不同条目。保存新域对象时,Grails会为对象分配一个在其域中唯一的ID。默认情况下,这是通过表示对象的DB表中的递增id来完成的。

如果在执行此验证时已将母亲和父亲保存到数据库中,则可能是有用的相等检查。

如果你只是试图阻止firstName,lastName和middleName在一个表单上是相同的,这似乎是这样的,只有你在这些字段中定义了唯一性限制时,这个验证才会有效。客户域,例如firstName(unique: ['lastName', 'middleName'])

考虑定义一个明确确保您正在寻找的唯一性的验证器。