Вопрос

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

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

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

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

getHibernateTemplate().saveOrUpdate( foo );

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

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

Любое обучение или указания?

Это было полезно?

Решение

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

Решением было удалить цикл iterator и заменить его на <=>.

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

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top