Hibernate flush не обновляет базу данных
Вопрос
Я использую hibernate для хранения набора объектов из веб-службы. Р>
По мере получения объекта каждый я сохраняю их, используя hibernate.
Получение объектов переносится в транзакцию, и все объекты появляются в базе данных после получения конечного объекта. Р>
Я сейчас пытаюсь, чтобы каждый объект появлялся в базе данных при сохранении. Я пытался добиться этого с помощью
getHibernateTemplate().saveOrUpdate( foo );
getHibernateTemplate().flush();
getHibernateTemplate().clear();
Насколько я понимаю, это должно удалить кеш значений hibernate и записать значения в базу данных.
Любое обучение или указания?
Решение
Спасибо за помощь, Брайан. Проблемы оказались в цикле for
в другом классе, заключающем вызов сохранения.
Решением было удалить цикл iterator
и заменить его на <=>.
Hibernate держал одну и ту же транзакцию для всего цикла <=>. Используя <=>, Hibernate запускает новую транзакцию и, следовательно, выполняет фиксацию в базе данных, а затем выполняет очистку перед началом следующей транзакции.
Другие советы
Если вы все еще находитесь внутри транзакции, то только сеанс или соединение, открывшее транзакцию, смогут просматривать записи. В некоторых базах данных вы должны видеть их из другого сеанса, если вы делаете грязное / незафиксированное чтение. Я бы попытался запустить select, используя тот же сеанс Hibernate после сброса, чтобы убедиться, что он действительно находится в базе данных. Только не запрашивайте по первичному ключу, иначе вы можете получить его из кэша.