2013-10-04 56 views
1

我在Grails中沒有太多的expierence,所以也許我不明白hasManybelongsTo GORM中的關係。如何更改GORM中的家長?

說,我有2個班Parent.groovyChild.groovy

class Parent { 
    String name 
    List childen = new ArrayList() 
    static hasMany = [children: Child] 
} 
class Child { 
    String name 
    static belongsTo = [parent: Parent] 
} 
Person person1 = new Person(name: "Person1") 
Child child1 = new Child(name: "child1") 
Child child2 = new Child(name: "child2") 
person1.addToChildren(child1).save(flush: true) 
person1.addToChildren(child2).save(flush: true) 
Person person2 = new Person(name: "Person2").save(flush: true) 

現在我想改變一個孩子的父母

child1.parent = parent2 // no effect 
child1.save(flush: true) 

在控制器就可以

Child child1 = Child.get(1) 
bindData(child1, [parent: [id: 2]]) 
child1.save(flush: true) 

但現在有在movie1.children空,在DB我可以看到PARENT_ID變化爲2

注:在活動記錄(滑軌)很容易

child1.parent_id = 2 

也許我並不需要如果我想改變父母,使用這種關係?

也許有另一種方法可以做到嗎?

回答

0

經過一番調查,我明白了爲什麼收集中存在空值。 在兒童表一開始也有這樣的價值觀

 
id | name | parent_id | parent_idx 
1 | child1 | 1  | 0 
2 | child2 | 1  | 1 

bindData(child1, [parent: [id: 2]]) 

我們有

 
id | name | parent_id | parent_idx 
1 | child1 | 2  | 0 
2 | child2 | 1  | 1 

所以現在parent2有parent_idx 0 child1 - 這是確定。但是,parent1具有child2且parent_idx = 1(不含0)。所以我們改變了parent_id的值而不改變parent_idx。

我希望有可能改變收藏索引。 所以得出的結論是:

我想改變家長,我們不應該用列表集合,所以我們不會有IDX列,並沒有任何問題