У меня есть следующий код:Почему данные хранятся в базе данных после 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();
Я просто не понимаю, почему данные хранятся в базе данных, когда я указал, что флаш инструкция? Пожалуйста, помогите мне разобраться!
Вы видите, что я прочитал книгу, которую он назвал «JAVA PERSISTENCE WITH HIBERNATE» Кристиан Бауэр, Гевин Кинг, и вот предложение от него: «Выбрав FlushMode.MANUAL, , вы можете указать, что только явные вызовы для результата flush() в синхронизации управляемого состояния с базой данных ". И в моем примере кода нет явного вызова flush(), то почему он все еще хранится в базе данных, может быть, есть что-то еще, чего я не знаю? –
Обычно вызовы в базу данных автоматически приводят к сбою. Flushmode.MANUAL будет вести себя как цитированное предложение. Commit специально означает сохранение изменений в базе данных. Это описывает это лучше http://stackoverflow.com/questions/14622962/what-is-transaction-commit-in-hibernate – darthNater
Спасибо, я думаю, что понимаю, но все еще имею маленького квеста, я отредактировал свой код путем edding session.clear() после session.save(). Документация говорит о методе clear() следующее: «Выкачать все загруженные экземпляры и отменить все ожидающие сохранения, обновления и удаления». Почему он не отменяет save() и сохраняет данные в базе данных? –