gpt4 book ai didi

grails - Grails,比较两个对象?

转载 作者:行者123 更新时间:2023-12-02 14:02:58 26 4
gpt4 key购买 nike

我有一个客户对象。

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"]
}
})
}
}

最佳答案

val == obj.father
由于Groovy重载==,将导致val.equals(obj.father)。这样做的默认行为是仅检查引用是否相等,这很危险。 Hibernate将尝试确保相等性(请参阅Fabiano的链接),但它可能不可靠。
val.id == obj.father.id
将确保两个对象代表与您的域对象关联的数据库表中的不同条目。保存新的域对象时,Grails会为该对象分配一个在其域内唯一的ID。默认情况下,这是通过在代表您的对象的数据库表中增加ID来完成的。

如果执行此验证时 parent 已经保存到数据库中,则这可能是有用的相等性检查。

如果您只是试图防止firstName,lastName和middleName在表单上看起来相同,则只有当您在客户端域中将这些字段作为组定义为唯一性约束时,此验证才有效,例如firstName(unique: ['lastName', 'middleName'])

考虑只定义一个验证器,以明确确保您要查找的唯一性。

关于grails - Grails,比较两个对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13393964/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com