关于在equals实现中包含域模型id的最佳实践

时间:2015-03-23 09:55:39

标签: grails grails-domain-class

在grails中实现域模型等同的最佳实践是什么?

我们是否包含id字段或仅包含业务规则相关字段?

1 个答案:

答案 0 :(得分:4)

Hibernate建议您在equals实现中仅包含业务键/候选键。如果已生成id字段,则在equals实现中包含id字段会产生负面影响。 Hibernate仅在保存对象时分配id(如果使用生成的id)。现在,例如,如果您的新未保存域对象在HashSet中并且您保存域,它将生成并将id分配给域,如果您的equals / hashcode基于id字段,域的哈希码将会改变,并且您的域名将会丢失。

建议您使用唯一的不可变字段实现equals。

参见参考资料

  1. https://docs.jboss.org/hibernate/stable/core.old/reference/en/html/persistent-classes-equalshashcode.html
  2. http://www.onjava.com/pub/a/onjava/2006/09/13/dont-let-hibernate-steal-your-identity.html
  3. Similar question