Hibernate flush не обновляет базу данных - PullRequest
0 голосов
/ 23 января 2009

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

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

Получение объектов переносится в транзакцию, и все объекты появляются в базе данных после получения конечного объекта.

Я сейчас пытаюсь, чтобы каждый объект появлялся в базе данных при сохранении. Я пытался добиться этого с помощью

getHibernateTemplate().saveOrUpdate( foo );

getHibernateTemplate().flush();
getHibernateTemplate().clear();

Насколько я понимаю, это должно удалить кэш значений Hibernate и записать значения в базу данных.

Любое обучение или направления?

Ответы [ 2 ]

1 голос
/ 01 февраля 2009

Спасибо за помощь, Брайан. Проблемы оказались в цикле for в другом классе, заключающем вызов сохранения.

Решение состояло в том, чтобы удалить петлю for и заменить ее на iterator.

Hibernate держал одну и ту же транзакцию для всего цикла for. Используя iterator, Hibernate, похоже, запускает новую транзакцию и, следовательно, выполняет фиксацию в базе данных и затем очищает перед началом следующей транзакции.

0 голосов
/ 23 января 2009

Если вы все еще находитесь внутри транзакции, то только сеанс или соединение, открывшее транзакцию, смогут просматривать записи. В некоторых базах данных вы должны видеть их из другого сеанса, если вы делаете грязное / незафиксированное чтение. Я бы попытался запустить select, используя тот же сеанс Hibernate после сброса, чтобы убедиться, что он действительно находится в базе данных. Только не запрашивайте по первичному ключу, иначе вы можете получить его из кэша.

...