2013-06-29 5 views
0

Я много раз рассказывал о flush(), commit(), и я прочитал спящую библию (Java Persistance with Hibernate).hibernate flush без фиксации, используя ручной flushmode

По-прежнему существует некоторая несогласованность в моем понимании того, как эти методы работают.

Вот несколько озадачивает наблюдение:

Предположим, что мы используем ручной flushmode. Мы начинаем новый сеанс, начинаем транзакцию, загружаем и изменяем некоторые постоянные объекты, а затем очищаем и закрываем сеанс, но мы не выполняем метод фиксации транзакции во время этого процесса.

Насколько я понимаю (из библейской гибернации), в этом случае модификации не сохранены в базе данных, хотя вызывается флеш(). Это правильное наблюдение?

Вот другой, связанный с этим вопрос, то hibernate javadoc говорит:

Промывка является процессом синхронизации основного постоянного хранилища с persistable состоянием проведенного в памяти.

Что это значит? Термин «синхронизация» здесь немного расплывчато, это описание не объясняет (что еще, противоречит!) Вышеупомянутое наблюдение.

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

ответ

3

Ниже должно помочь:

Насколько я понимаю (из спящего режима библии), в этом случае изменения не сохраняются в базе данных, даже если на одном уровне() была вызвана. Это правильное наблюдение? : да, это правильно.

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

это означает, что состояние сущностей синхронизировано с состоянием базы данных.

Может кто-то пожалуйста, точно разъяснить смысл синхронизации слова здесь, как я не могу найти ответ на этот вопрос ни в сети, ни в спящей библии:

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

Но выполняется ли операция обновления, нет, вам необходимо выполнить фиксацию, чтобы убедиться, что это обновление действительно отражено в БД.

Таким образом, часть синхронизации, которая вас сбивает с толку, - это не что иное, как синхронизация базы данных и ваших объектов.

Фактически, когда вы вызываете commit(), он по умолчанию неявно вызывает flush().

0

Да, когда мы вызываем метод flush() в сеансе, изменения объекта синхронизируются с Связанным с DB сущностью, но он не будет обновляться до БД. когда мы вызываем Commit(), это будет обновление.

Смежные вопросы