Относительно гибернации транзакции и сброса - PullRequest
5 голосов
/ 31 марта 2012

Я новичок в спящем режиме. у меня есть сомнения относительно транзакций и очистки ..

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

1) session.getTransaction.commit (); 2) session.flush ()

Согласно тому, что я прочитал, commit () фиксирует значения в базе данных. flush () синхронизирует состояние объектов с базой данных.

В чем разница между этими двумя.

1 Ответ

8 голосов
/ 31 марта 2012

session.flush() выполнит процесс очистки, который будет выполнять грязную проверку всех постоянных объектов, управляемых сеансом гибернации. Если объект считается грязным (т. Е. Любые значения объекта, хранящиеся в этом сеансе гибернации, отличаются от соответствующая запись в базе данных), hibernate немедленно выдаст SQL-запросы ОБНОВЛЕНИЯ в БД, чтобы синхронизировать эти различия, чтобы объект, сохраненный в сеансе гибернации, имел те же значения с соответствующей записью базы данных.

Тем не менее, просто выдача SQL UPDATE не означает, что измененные данные фактически сохраняются в БД, вы должны совершить транзакцию, чтобы подтвердить фактическое сохранение измененных данных в БД. Это также означает, что вы можете выполнить ROLLBACK изменения, внесенные UPDATE SQL, если обнаружены какие-либо ошибки после выдачи UPDATE SQL, но до совершения транзакции.

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

Таким образом, когда session.getTransaction.commit() вызывается по умолчанию FlushMode, session.flush() будет выполняться неявно перед выполнением session.getTransaction.commit().

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