我想知道是否有可能创建一个grails域对象,但只是将它保留在命令上,而不是在我们对它进行操作时。
更确切地说,这就是我现在要做的事情:
Foo foo = new Foo(name:"asdf")
Bar bar = new Bar(name:"gzxj")
bar.save() // persist here
foo.save() // persist here
foo.addToBars(bar) // now I have to build the relationship
我想要的是什么:
Foo foo = new Foo(name:"asdf")
Bar bar = new Bar(name:"gzxj")
foo.addToBars(bar) // just build the relationship
bar.save() // would be great to ignore this step
foo.save() // can I now atomically build both objects and create the relationships?
我的印象是,如果要关联很多关系,后者会快得多。我真的只想在这里使用NoSQL吗?
答案 0 :(得分:2)
根据您建立关系的方式,这是完全可能的。它实际上与您实施的数据库无关。
家长班
class Foo {
String name
static hasMany = [bars: Bar]
}
儿童课
class Bar {
String name
Foo foo //optional back reference
static belongsTo = Foo
}
<强>执行强>
Foo foo = new Foo(name: 'a')
Bar bar = new Bar(name: 'b')
foo.addToBars(bar)
foo.save()
//or even more terse
Foo foo = new Foo(name: 'c')
foo.addToBars(new Bar(name: 'd'))
foo.save()
密钥是belongsTo
,默认为all
class Foo {
String name
static hasMany = [bars: Bar]
static mapping = {
bars cascade: 'all'
}
}
。这也可以明确设置:
forEach