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

标签 grails grails-domain-class

在 Grails 中实现领域模型等价的最佳实践是什么?

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

最佳答案

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

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

查看引用资料

  • https://docs.jboss.org/hibernate/stable/core.old/reference/en/html/persistent-classes-equalshashcode.html
  • http://www.onjava.com/pub/a/onjava/2006/09/13/dont-let-hibernate-steal-your-identity.html
  • Similar question
  • 关于grails - 关于在 equals 实现中包含域模型 id 的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29207268/

    相关文章:

    grails - Grails拆分应用程序

    grails - 除了使用 transient 关键字之外,还有其他任何方法可以阻止Grails域类中字段(也是域类对象)的持久性吗?

    grails - 在保存域对象之前修改参数

    grails - Groovy MetaClass-将类别方法添加到适当的metaClasses

    grails - 如何在Grails Webflow插件中获取当前 View 状态名称

    debugging - Intellij 想法 在不停止完整调试的情况下停止执行函数

    grails - 如何设置Grails代理有错误和Grails安装

    date - Grails Date变量将不会设置时间

    jquery - Grails注入(inject)g :select and jQuery handler

    grails - Grails,域的域类默认值