0
我想在我的域類上使用@EqualsAndHashCode註釋,但似乎由該註釋生成的equals
和hashCode
方法不考慮hasMany
字段。我沒有看到任何方式來改變這個註釋,但我希望我錯過了一些東西,因爲它非常方便(如果它工作的話)。在equals和hashCode中擁有許多關係的帳戶
我想在我的域類上使用@EqualsAndHashCode註釋,但似乎由該註釋生成的equals
和hashCode
方法不考慮hasMany
字段。我沒有看到任何方式來改變這個註釋,但我希望我錯過了一些東西,因爲它非常方便(如果它工作的話)。在equals和hashCode中擁有許多關係的帳戶
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
。
你在上次評論中的「索引」是什麼意思?默認'hasMany'使用'Set'不會呢?所以,如果我只使用set,我可以期望從典型的Grails hasMany關係中獲得同樣的行爲嗎?你能舉一個例子說明爲什麼我想用'List'而不是'Set'? – ubiquibacon
是的,默認hasMany使用Set。如果你想使用像兒童[0],孩子[1]等有序的兒童,那麼你可以使用它作爲一個列表。請參閱GORM文檔中的[對象列表](http://grails.org/doc/latest/guide/GORM.html#sets,ListsAndMaps)。 – dmahapatro
@ubiquibacon回答有幫助嗎? – dmahapatro