Подтвердить что ты не робот

В чем разница между флешем и фиксацией в Hibernate?

В чем разница между флешем и фиксацией в Hibernate?

4b9b3361

Ответ 1

Процесс синхронизации состояния соединения JDBC с состоянием объектов, хранящихся в памяти, называется flush.

Это происходит в следующих точках в зависимости от набора FlushMode:

  • перед выполнением некоторых запросов, когда FlushMode.AUTO(это значение по умолчанию).
  • из org.hibernate.Transaction.commit(), когда FlushMode.COMMIT
  • из Session.flush()

Ключевое различие заключается в том, что когда FlushMode установлен в COMMIT, commit() очищает сеанс, а также завершает работу, и вы не можете отменить транзакцию, где flush() выполняет обычную синхронизацию сеанса.

FlushMode

Подробнее информация

Ответ 2

От Hibernate docs

Промывка - это процесс синхронизации лежащих в основе постоянных хранить с сохранением состояния, хранящегося в памяти.

Правило выше формулировки сбивает с толку для некоторых людей, которые могут задавать следующий вопрос (т.е. что diff b/w, затем flush и commit) в виду после прочтения инструкции выше.

Флеш похож на выполнение инструкции, но не ее фиксацию. Например: - вы открываете любой инструмент выполнения sql, такой как oracle SQLdeveloper, откройте сеанс и оператор обновления для обновления. Откройте новый сеанс sql, вы не увидите обновления до и до тех пор, пока вы не зафиксируете в первом сеансе. Таким образом, запрос был выполнен в частности оракуле, но не был выполнен.

Когда вы вызываете спящий режим сохранения (или обновления), это не означает, что базовый запрос выполняется одновременно. Он обычно выполняется, когда фиксация выполняется либо явно, либо в конце транзакции. Но есть сценарии (например, чтобы получить идентификатор, назначенный временному объекту, для управления размером сеанса гибернации, например, в пакетных обновлениях, иначе вы можете получить исключение из mem), где вы хотите выполнить запрос, но не совершать его. Flush помогает здесь