Я использую hibernate для сохранения, обновления и удаления данных в моей базе данных, но у меня есть некоторые проблемы.
Для Например, у меня есть запрос на сохранение или обновление моих данных в базе данных
getHibernateTemplate().saveOrUpdate(client);
getHibernateTemplate().flush();
Когда я запускаю свой сервер (TomCat) для первого и сохраняю свои данные, все в порядке, в моей базе данных я вижу свои данные.
Если я удалить данные, и я запускаю новое сохранение моего клиента, он выполняет обновление, а не вставку, даже если я удалил данные.
Это потому, что объекты уже находятся в памяти и спящий режим уже сохранил их . Когда приложение запускается, hiberante загружает объекты в память по мере необходимости (ленивая выборка), если не указано иное. Когда объект изменяется программно, hibernate сохраняет объект в базе данных. Вам не нужно использовать save()
, достаточно commit()
. save
предназначен только для вновь созданных объектов, а update()
— для повторного присоединения отсоединенных объектов к сеансу.
Вы не можете изменить данные базы данных без использования спящего режима и ожидать, что спящий режим поймет, что база данных изменилась. Вы должны изменить данные, используя методы hibernate session
.
Если вы изменяете данные, не используя спящий режим, и хотите, чтобы спящий режим перезагрузил объект, используйте метод session.refresh()
для перезагрузки объекта в память из базы данных. Таким образом, изменения в базе данных будут отражаться в объекте, загруженном в память.
Дополнительная информация в Главе 10 документации Hibernate