2013-06-18 3 views
0

Я пытаюсь вставить каждые 100 записей из файла с помощью вставки в гибернате. Если я завершу логику внутри транзакции, она будет работать, как ожидалось, например, скажем, я создаю 3 партии из 300 записей и обертывания логики внутри транзакции, тогда транзакция будет откат 1-й и 2-й партии, если у 3-й партии возникла проблема.многократная вставка в транзакции

ответ

2

Всегда заверните свою партию в транзакцию. Если вы вносите 100 вложений в транзакцию, то все 100 будут совершены, если все будет в порядке. Я также предлагаю вам использовать сеансы без гражданства, чтобы ускорить вставку в пакет. Я настоятельно рекомендую вам прочитать руководство по документации Hibernate Batch processing.

+0

может я обернуть все партии в одной транзакции. – cooper

+0

Я только что прошел через ссылку, которую вы создали, и мое hibernate pojo имеет сложный граф объектов и содержит коллекции внутри, поэтому я обнаружил, что не могу использовать сеансы без состояния в таком случае. Правильно, если я ошибаюсь. – cooper

+0

@cooper Неправильно. Вам нужны сеансы с сохранением состояния, когда вы хотите, чтобы спящий режим был грязным, проверьте свои pojos, которые не нужны (из того, что я прочитал) в вашем случае. Управление загрязнением имеет дополнительные накладные расходы с точки зрения памяти и производительности. –

0

Вкратце: он будет работать должным образом.

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

(конечно, это другая история, если у вас есть вложенные транзакции или используя веху в транзакции.)

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