【问题标题】:Should I implement equals and hashCode in a domain class?我应该在域类中实现 equals 和 hashCode 吗?
【发布时间】:2015-04-17 06:16:51
【问题描述】:

是否应该所有 Grails 域类都实现 equals()hashCode()? Grails 是否提供了默认值?

似乎不需要这个,因为总是有一个 id。

【问题讨论】:

    标签: grails


    【解决方案1】:

    在 Grails 书籍“Programming Grails”中,Burt 谈到了 equals 和 hashCode(我希望我能在这里得到它),它们应该在代理使用场景中实现(比如在执行延迟加载或 @987654322 时) @) 并存储在集合中。因为如果代理实体和非代理实体存储在集合中,它们不会被视为“相同”对象。

    如果 Hibernate 通常使用未代理版本的域实例,如果它已经在一级缓存(Hibernate 会话)中,那么只有当您有一个不在当前休眠会话中的域对象时才会出现此问题(如 http 会话)。

    如果你想避免那么多样板代码,你可以使用注解@EqualsAndHashCode(见docs),如下所示:

    @EqualsAndHashCode(includes='firstName,lastName')
    class Customer {
      String customerId
      String firstName
      String lastName
    }
    

    有关详细信息,请参阅“Programming Grails - Burt Beckwith”第一版,第 134 页。

    【讨论】:

    • 感谢马里奥的帮助!我可能对这个话题有更多的问题,但你已经为我指明了正确的方向。
    • 包含是否可以与另一个域类或只是简单类型有关系?
    猜你喜欢
    • 1970-01-01
    • 2011-05-22
    • 1970-01-01
    • 2011-06-13
    • 2019-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-10
    相关资源
    最近更新 更多