Сохранение нескольких записей в базе данных с помощью Hibernate - PullRequest
3 голосов
/ 19 января 2012

Я хочу сохранить несколько записей в БД, используя Hibernate. Мне это удалось. Но я считаю, что мой подход неверен.

Я хочу хранить в БД, как,

FirstName          LastName   
FNameABC           LNameCC         
FNamePQR           LNameDD         
FNameXYZ           LNameEE 

Я сохранил вышеуказанные значения в БД как,

Iterator itr = list.Iterator();
while(itr.hasNext()) {
   Test t = (Test)itr.next();
   dbEntity.setFirstName(t.setFirstName());
   dbEntity.setLastName(t.setLastName());
   session.beginTransaction();
   session.save(dbEntity);
   session.getTransaction().commit();
   session.close();
}  

Здесь я сохраняю значение в сеансе внутри цикла. Поэтому каждый раз для каждой записи она будет вызывать beginTransaction(), save(), commit(). Есть ли лучший подход?

Ответы [ 2 ]

3 голосов
/ 19 января 2012

Пожалуйста, посмотрите на эту страницу: http://docs.jboss.org/hibernate/core/3.3/reference/en/html/batch.html

Вы должны открыть транзакцию, сохранить сущности (в цикле), в конце зафиксировать транзакцию и закрыть сеанс. Как и предполагалось, вы можете иметь счетчик во время цикла и мигать / очищать сеанс после достижения определенного числа - периодически.

2 голосов
/ 19 января 2012

Вы не решаете начать и совершить транзакцию, исходя из технических или эксплуатационных соображений. Вы решаете делать это на основе того, что, по вашему мнению, должно быть сделано атомарно, согласованно и изолированно от других транзакций. Читать http://en.wikipedia.org/wiki/ACID.

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...