2013-08-18 24 views

回答

3
  • 在父域類中定義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

+0

你在上次評論中的「索引」是什麼意思?默認'hasMany'使用'Set'不會呢?所以,如果我只使用set,我可以期望從典型的Grails hasMany關係中獲得同樣的行爲嗎?你能舉一個例子說明爲什麼我想用'List'而不是'Set'? – ubiquibacon

+0

是的,默認hasMany使用Set。如果你想使用像兒童[0],孩子[1]等有序的兒童,那麼你可以使用它作爲一個列表。請參閱GORM文檔中的[對象列表](http://grails.org/doc/latest/guide/GORM.html#sets,ListsAndMaps)。 – dmahapatro

+0

@ubiquibacon回答有幫助嗎? – dmahapatro

相關問題