我想在域类上使用@EqualsAndHashCode批注,但似乎该批注生成的equals
和hashCode
方法没有考虑hasMany
字段。我看不到用注释更改此方法的任何方法,但我希望我缺少一些东西,因为它非常方便(如果可行)。
最佳答案
hasMany
关系定义为Set
,由于多余,我们通常不这样做。 @EqualsAndHashCode
AST。 例如:
import groovy.transform.EqualsAndHashCode
@EqualsAndHashCode
class Parent {
String name
Integer age
//Adding this as a property makes it a candidate for equals() and hashCode()
Set<Child> children
static hasMany = [children: Child]
}
@EqualsAndHashCode
class Child {
String name
static belongsTo = [parent : Parent]
}
//Unit Test
void testSomething() {
def parent1 = new Parent(name: 'Test', age: 20).save()
def child1 = new Child(name: 'Child1')
parent1.addToChildren(child1)
parent1.save()
def parent2 = new Parent(name: 'Test', age: 20).save()
def child2 = new Child(name: 'Child1')
parent2.addToChildren(child2)
parent2.save(flush: true)
assert parent1 == parent2
assert child1 == child2
}
如果您正在考虑索引hasMany项,然后使用
List
而不是Set
。关于grails - 在equals和hashCode中说明hasMany关系,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18295781/