Что означает включение и выключение autocommit в Hibernate?

280
08 августа 2017, 14:34

В чем разница в поведении в случаях если я устанавливаю hibernate.connection.autocommit true или false?

И почему включать эту функцию не рекомендуется?

Answer 1
hibernate.connection.autocommit=true

идентично JDBC команде: Connection.setAutoCommit(true);

Означает, что каждое SQL выражение рассматривается как отдельная транзакция и после выполнения выражения автоматически закрывается транзакция вызовом commit() - то есть подтверждением, что транзакция завершилась.

Это удобно и применяется только для простых операций. Для более сложных операций автокоммит может приводить к катастрофе.

Простой пример: допустим вы делаете перевод денег с одного счета на другой - это 2 операции - списание денег с одного счета и зачисление денег на другой счет. В ситуации с автокоммитом - вы списываете деньги с одного счета и подтверждаете транзакцию, далее зачисляете деньги на второй счет и опять подтверждаете транзакцию - вроде все отлично. Однако, если в момент между снятием денег с одного счета и зачислением денег на второй счет допустим падает коннекшн или рушится сервер, то после восстановления - вы получите что денежки пропали - со счета списались, но никуда не зачислились, а деньги эт всегда серьезно.

В правильной системе вы должны делать так:

  1. Начинаем транзакцию
  2. Списываем деньги с одного счета
  3. Зачисляем деньги на второй счет
  4. Подтверждаем успешность транзакции (вызываем commit())

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

Более подробно, например здесь

READ ALSO
Как сделать, чтобы после выбора пункта из Spinner появлялся новый Spinner (которого изначально не было)

Как сделать, чтобы после выбора пункта из Spinner появлялся новый Spinner (которого изначально не было)

Например: в первом списке мы выбираем страну, появляется новый (ниже первого), там выбираем город, появляется новый и тд пока не дойдем до конечного...

326
Кнопка в определенных координатах

Кнопка в определенных координатах

Суть: нужна кнопка которая появляется при определённом событии в 2D игре(не меню)Не всплывающее окно и не JButton

272
Register CLOB fail or no

Register CLOB fail or no

Есть такой вопросУ меня в базе есть пакет с функцией, который возвращает CLOB

316
Разбор XML и вывод в Excel

Разбор XML и вывод в Excel

Есть XML файл с таким содержимымСтрок ROW много

407