2010-08-05 3 views
1

Я пытаюсь выполнить совет, найденный в this great blog post for batch processing in grails with MySQL. Проблема, с которой я сталкиваюсь, заключается в том, что включение периодических вызовов в session.clear() в моем цикле вызывает org.hibernate.LazyInitializationException. В разделе комментариев есть цитата:grails и mysql пакетная обработка

Вы второй вопрос о потенциально , вызывающий LIE, абсолютно верно. Если вы делаете другие вещи за пределами , импортируя с текущей нитью, , вы обязательно захотите повторно подключить к любым объектам сессии после , вы делаете свою очистку.

Но как это сделать? Может ли кто-нибудь помочь мне конкретно понять, как «повторно подключить какие-либо объекты к сеансу после того, как я закончил очистку?»

Я также заинтересован в параллелизации процесса вставки базы данных, чтобы я мог использовать многоядерный процессор. может кто-нибудь давать рекомендации о том, как сделать это в Grails?

ответ

1

Grails имеет несколько методов, чтобы помочь с этим (они рычаги зимуют под одеялом).

Если вы знаете, объект отсоединяется, вы можете использовать attach метод для его повторного подключения.

Если вы внесли изменения в объект t, пока он был удален, вы можете использовать merge.

Если по какой-либо причине вы не уверены, что объект прикреплен к сеансу, вы можете использовать метод link text, чтобы узнать, есть он или нет.

Возможно, стоит ознакомиться с документацией на гибернате на странице Session.

+0

благодарит за ответ. Есть ли у вас какие-либо советы о том, как я могу определить, какие объекты нужно повторно привязать? – vicatcu

+1

@vicatu, к сожалению, это зависит от решения, это зависит от того, какие объекты вы могли бы отключить во время clear(). Другая вещь, которую вы могли бы попробовать, заключается в том, что вместо того, чтобы выполнять очистку сеанса грубой силы, вы могли бы выселить определенные объекты домена, с которыми вы работаете в сеансе. Еще одна вещь, которую я не пробовал, - это новый метод «withNewSession» в GORM (http://www.grails.org/doc/latest/ref/Domain%20Classes/withNewSession.html). Это было не во время, когда я писал сообщение первоначально, но может быть лучшим способом для переноса транзакции и очистки после. –

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