Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Grails MongoDB嵌入式域对象保存_Mongodb_Grails_Gorm Mongodb - Fatal编程技术网

Grails MongoDB嵌入式域对象保存

Grails MongoDB嵌入式域对象保存,mongodb,grails,gorm-mongodb,Mongodb,Grails,Gorm Mongodb,当试图保存Mongo支持的Grails域对象时,我的所有嵌入对象都会调用save()。在某些情况下,这会对性能造成巨大影响 下面是一些示例域对象 class Bird { Object Id String name } class Nest { static embedded = ['birds'] String name Set<Bird> birds } class Tree { static embedded = ['nes

当试图保存Mongo支持的Grails域对象时,我的所有嵌入对象都会调用
save()
。在某些情况下,这会对性能造成巨大影响

下面是一些示例域对象

class Bird {
    Object Id
    String name
}

class Nest {
    static embedded = ['birds']

    String name
    Set<Bird> birds
}

class Tree {
    static embedded = ['nests']

    Object Id
    String name
}

class TreeState {
    static embedded = ['tree']

    Object Id
    Set<Nest> nests
    Tree tree
    Date dateCreated
}
这类操作似乎会导致嵌入式实体,
Bird
Tree
保存为值,但似乎也会保存以更新其关联的域模型

有没有一种方法可以禁止更新这些引用,而只保存
TreeState
对象中的嵌入字段

def tree = Tree.findByName("Sleepwood")

def nestA = new Nest()
nestA.birds = new LinkedHashSet()
nestA.name = "Sleepwood-A"

def nestB = new Nest()
nestB.birds = new LinkedHashSet()
nestB.name = "Sleepwood-B"

def blueJay = Bird.findByName('Blue Jay')
def cardinal = Bird.findByName('Cardinal')
def oriole = Bird.findByName('Oriole')
def robin = Bird.findByName('Robin')

def treeState =  new TreeState()
treeState.nests =  new LinkedHashSet()
treeState.tree = tree

nestA.add(blueJay)
nestA.add(cardinal)
nestA.add(oriole)

nestB.add(oriole)
nestB.add(blueJay)
nestB.add(robin)

treeState.nests.add(nestA)
treeState.nests.add(nestB)
treeState.safe(failOnError: true)