2012-03-02 4 views
2

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

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

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

Кто-нибудь сделал что-то подобное и может дать некоторые указания/советы, как действовать дальше?

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

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

ответ

0

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

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

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

Это может быть полезно, чтобы увидеть сообщение об ошибке себя и ваш структура класса домена.

0

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

Смежные вопросы