【发布时间】:2015-04-17 06:16:51
【问题描述】:
是否应该所有 Grails 域类都实现 equals() 和 hashCode()? Grails 是否提供了默认值?
似乎不需要这个,因为总是有一个 id。
【问题讨论】:
标签: grails
是否应该所有 Grails 域类都实现 equals() 和 hashCode()? Grails 是否提供了默认值?
似乎不需要这个,因为总是有一个 id。
【问题讨论】:
标签: grails
在 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 页。
【讨论】: