Проблема с шаблоном Hibernate

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

Для Например, у меня есть запрос на сохранение или обновление моих данных в базе данных

getHibernateTemplate().saveOrUpdate(client);
getHibernateTemplate().flush();

Когда я запускаю свой сервер (TomCat) для первого и сохраняю свои данные, все в порядке, в моей базе данных я вижу свои данные.

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

1
задан Fenton 26 August 2010 в 10:23
поделиться

1 ответ

Это потому, что объекты уже находятся в памяти и спящий режим уже сохранил их . Когда приложение запускается, hiberante загружает объекты в память по мере необходимости (ленивая выборка), если не указано иное. Когда объект изменяется программно, hibernate сохраняет объект в базе данных. Вам не нужно использовать save(), достаточно commit(). save предназначен только для вновь созданных объектов, а update() — для повторного присоединения отсоединенных объектов к сеансу.

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

Если вы изменяете данные, не используя спящий режим, и хотите, чтобы спящий режим перезагрузил объект, используйте метод session.refresh() для перезагрузки объекта в память из базы данных. Таким образом, изменения в базе данных будут отражаться в объекте, загруженном в память.

Дополнительная информация в Главе 10 документации Hibernate

2
ответ дан 2 September 2019 в 21:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: