хотите, чтобы каждый звонок сохранялся, чтобы зафиксировать - PullRequest
1 голос
/ 06 января 2010

Как мне каждый вызов сохранить коммит в базу данных?

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

для моего приложения, просто иметь фиксацию в каждом сеансе. Сохранение в порядке.

Ответы [ 2 ]

2 голосов
/ 06 января 2010

Так что запишите это так:

// connection is passed into the method.
try
{
    connection.setAutoCommit(false);
    PreparedStatement ps = connection.prepareStatement(...);
    // bind variables
    for (Collection stuff : stuffList)
    {  
        // save repeatedly 
    }
    connection.commit();
}
catch (SQLException e)
{
   DatabaseUtils.rollback(connection);
}
finally
{
    DatbaseUtils.close(statement);
    DatabaseUtils.close(connection);
}

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

1 голос
/ 06 января 2010

РЕДАКТИРОВАТЬ: использовать транзакцию гибернации:

Session s = factory.getCurrentSession();
try {
  s.beginTransaction();
  Thing thing = new Thing();
  s.save(thing);
  s.getTransaction().commit();
} catch (RuntimeException e) {
  s.getTransaction().rollback();
  throw e;
}

Обработка транзакций в спящем режиме подробно описана здесь:

В среде сервлета hibernate рекомендует реализовать фильтр, который запускает транзакцию, когда запрос начинается, и заканчивает ее, когда запрос выполнен. Пример кода здесь:

При использовании JTA или EJB существуют методы для работы с существующим контекстом транзакции, как описано в руководстве.

В качестве альтернативы вы можете включить режим autoCommit (который по умолчанию отключен). Каждое утверждение будет эффективно выполняться в отдельной транзакции. Это контролируется опцией "hibernate.connection.autocommit". Подробнее здесь:

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