保存大型域对象树的提示

时间:2012-03-02 16:50:25

标签: grails gorm grails-domain-class grails-2.0

我正在尝试保存一个大的grails域对象结构,其中域类的数量是少数,但对象的数量大约是一百个。使用经典grails hasMany链接对象。

基本思想是首先擦除数据库,然后使用自定义groovy构建器使用配置DSL填充它。构建器返回一个完整的对象图/树,然后我想保存它。

我已经尝试了各种方法来保存它,例如只保存根节点,遍历整个树,节省每个节点等。但是,Hibernate在各个地方吵醒抱怨刷新的会话。

有没有人做过类似的事情,可以给出一些指示/建议如何继续?

将save()操作集成到构建过程的一部分是否更好,例如nodeCompleted(parent,node)?

Hibernate是否已超出未完成的SQL操作数量?

2 个答案:

答案 0 :(得分:0)

如果它确实是一个完整的对象树(使用belongsTo关键字),那么根节点的保存应该级联到所有其他对象。但是,手动保存每个项目也应该正常工作,只要你不说齐全:除了最后一次保存之外的任何一个都是真的。

当我处理大量对象时,出于完全不同的原因,我发现像这样进行手动会话处理很有帮助:

MyDomainClass.withSession { context ->
  //my stuff here
  //save
}

查看错误消息本身和域类结构可能也很有用。

答案 1 :(得分:0)

尝试创建rootNode,addToChildNodes并使用rootNode.save(flush:true)来保存对象树。