所有Grails域类都应该实现equals()
和hashCode()
吗?Grails是否提供默认值?
似乎不需要,因为总是有一个id。
在Grails的《 Programming Grails》一书中,Burt谈到了equals和hashCode(我希望我能在这里得到它),它们应该在代理使用的情况下实现(例如在进行延迟加载或时Customer.load()
),并存储在集合。因为如果将代理实体和未代理实体存储在集合中,则它们不会被视为“相同”对象。
由于Hibernate通常已经在第一级缓存(Hibernate会话)中使用了非代理版本的域实例,因此仅当您拥有一个域对象(而不是当前的Hibernate会话)时,才会出现此问题。 http会话)。
如果要避免那么多样板代码,可以使用Annotation @EqualsAndHashCode
(请参阅docs),如下所示:
@EqualsAndHashCode(includes='firstName,lastName')
class Customer {
String customerId
String firstName
String lastName
}
有关更多信息,请参见“编程Grails-Burt Beckwith”第一版,第134页。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句