在grails中实现域模型等同的最佳实践是什么?
我们是否包含id字段或仅包含业务规则相关字段?
答案 0 :(得分:4)
Hibernate建议您在equals实现中仅包含业务键/候选键。如果已生成id字段,则在equals实现中包含id字段会产生负面影响。 Hibernate仅在保存对象时分配id(如果使用生成的id)。现在,例如,如果您的新未保存域对象在HashSet中并且您保存域,它将生成并将id分配给域,如果您的equals / hashcode基于id字段,域的哈希码将会改变,并且您的域名将会丢失。
建议您使用唯一的不可变字段实现equals。
参见参考资料