2017-02-21 12 views
1

У меня есть следующий код:Почему данные хранятся в базе данных после session.setFlushMode (FlushMode.MANUAL); session.save(); (Спящий режим)

Color color = new Color(null,"B12",null,1); 

    Session session=sessionFactory.openSession(); 
    session.setFlushMode(FlushMode.MANUAL); 

    session.beginTransaction(); 
    session.save(color); 
    session.clear(); 

    session.getTransaction().commit(); 

    session.close(); 

    sessionFactory.close(); 

Я просто не понимаю, почему данные хранятся в базе данных, когда я указал, что флаш инструкция? Пожалуйста, помогите мне разобраться!

ответ

1

Причина: session.getTransaction(). Commit() сохраняет все изменения в базе данных. См. Этот пост stackoverflow.

HIbernate commit() and flush()

Flush используется для передачи элементов в базу данных до фиксации.

+0

Вы видите, что я прочитал книгу, которую он назвал «JAVA PERSISTENCE WITH HIBERNATE» Кристиан Бауэр, Гевин Кинг, и вот предложение от него: «Выбрав FlushMode.MANUAL, , вы можете указать, что только явные вызовы для результата flush() в синхронизации управляемого состояния с базой данных ". И в моем примере кода нет явного вызова flush(), то почему он все еще хранится в базе данных, может быть, есть что-то еще, чего я не знаю? –

+1

Обычно вызовы в базу данных автоматически приводят к сбою. Flushmode.MANUAL будет вести себя как цитированное предложение. Commit специально означает сохранение изменений в базе данных. Это описывает это лучше http://stackoverflow.com/questions/14622962/what-is-transaction-commit-in-hibernate – darthNater

+0

Спасибо, я думаю, что понимаю, но все еще имею маленького квеста, я отредактировал свой код путем edding session.clear() после session.save(). Документация говорит о методе clear() следующее: «Выкачать все загруженные экземпляры и отменить все ожидающие сохранения, обновления и удаления». Почему он не отменяет save() и сохраняет данные в базе данных? –