1

我对Grails没有太多的经验,所以可能我不了解GORM中的hasManybelongsTo关系。

说,我有 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中有null,在DB中我可以看到parent_id已更改为2

注意:在 Active Record (Rails) 中很容易

child1.parent_id = 2

如果我想改变父母,也许我不需要使用这种关系?

也许还有另一种方法可以做到这一点?

4

1 回答 1

0

经过一番调查,我明白了为什么集合中有一个空值。一开始在Child表中有这样的值

编号 | 姓名 | parent_id | parent_idx
1 | 孩子1 | 1 | 0
2 | 孩子2 | 1 | 1

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

我们有

编号 | 姓名 | parent_id | parent_idx
1 | 孩子1 | 2 | 0
2 | 孩子2 | 1 | 1

所以现在 parent2 的 child1 的 parent_idx 为 0 - 没关系。但是 parent1 的 child2 的 parent_idx = 1(没有 0)。所以我们改变了 parent_id 值而不改变 parent_idx。

我希望也有可能更改集合中的索引。所以结论是:

我要更改父级,我们不应该使用List集合,所以我们不会有 idx 列并且没有问题

于 2013-10-12T16:55:56.200 回答