我正在尝试保存一个大的grails域对象结构,其中域类的数量是少数,但对象的数量大约是一百个。使用经典grails hasMany链接对象。
基本思想是首先擦除数据库,然后使用自定义groovy构建器使用配置DSL填充它。构建器返回一个完整的对象图/树,然后我想保存它。
我已经尝试了各种方法来保存它,例如只保存根节点,遍历整个树,节省每个节点等。但是,Hibernate在各个地方吵醒抱怨刷新的会话。
有没有人做过类似的事情,可以给出一些指示/建议如何继续?
将save()操作集成到构建过程的一部分是否更好,例如nodeCompleted(parent,node)?
Hibernate是否已超出未完成的SQL操作数量?
答案 0 :(得分:0)
如果它确实是一个完整的对象树(使用belongsTo关键字),那么根节点的保存应该级联到所有其他对象。但是,手动保存每个项目也应该正常工作,只要你不说齐全:除了最后一次保存之外的任何一个都是真的。
当我处理大量对象时,出于完全不同的原因,我发现像这样进行手动会话处理很有帮助:
MyDomainClass.withSession { context ->
//my stuff here
//save
}
查看错误消息本身和域类结构可能也很有用。
答案 1 :(得分:0)
尝试创建rootNode,addToChildNodes并使用rootNode.save(flush:true)来保存对象树。