2010-08-26 2 views
1

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

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

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

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

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

ответ

1

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

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

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

Дополнительная информация в Chapter 10 of Hibernate documentation

+0

как я могу это сделать? – Mercer

+0

Прочитайте это [руководство по кикстарту] (http://techtracer.com/2008/12/30/the-great-hibernate-tutorial-a-great-jump-start-for-beginners/) – pakore

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