Советы по сохранению большого дерева доменных объектов - PullRequest
2 голосов
/ 02 марта 2012

Я пытаюсь сохранить большую структуру объектов домена Grails, где число классов домена несколько, а количество объектов около ста.Объекты связаны с использованием классического грааля hasMany.

Основная идея состоит в том, чтобы сначала стереть базу данных, а затем заполнить ее конфигурационным DSL, используя собственный конструктор groovy.Построитель возвращает полный граф / дерево объектов, которые я затем хочу сохранить.

Я пытался сохранить его различными способами, например сохранить только корневой узел, пройти по всему дереву, сохранив каждый узел и т. Д. Однако, Hibernate выручает в разных местах, жалуясь на вспыхнувшую сессию.

Кто-нибудь делал что-то подобное и может дать несколько советов / советов, как поступить?

Было бы лучше интегрировать операции save () как часть процесса сборки, например, nodeCompleted (parent, узел)?

Имеет ли Hibernate максимальное число ожидающих операций SQL, которое было превышено?

Ответы [ 2 ]

0 голосов
/ 24 января 2013

Попробуйте создать rootNode, addToChildNodes и использовать rootNode.save (flush: true) для сохранения дерева объектов.

0 голосов
/ 02 марта 2012

Если это действительно полное объектное дерево (с использованием ключевого слова ownTo), то сохранение корневого узла должно каскадироваться ко всем остальным объектам. Однако ручное сохранение каждого элемента также должно работать, если вы не говорите flush: true для любого, кроме последнего сохранения.

Когда я обрабатывал большое количество объектов по совершенно разным причинам, я счел полезным выполнять ручную обработку сеанса следующим образом:

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

Также может быть полезно увидеть само сообщение об ошибке и структуру вашего домена.

...