Hibernate получает старые данные после вставки транзакции - PullRequest
1 голос
/ 11 марта 2011

Я использую Hibernate в Spring MVC 3.05 и базу данных Oracle.

У меня есть транзакция, в которой я вставляю новую запись в две таблицы: Пользователь и Регистрация.

Регистрация содержит идентификатор пользователя (это означает, что у пользователя может быть много регистраций).

Когда я фиксирую транзакцию, я могу запросить свою базу данных и увидеть, что новые строки были успешно вставлены.

Проблема После успешного завершения транзакции я перенаправляю пользователя на страницу подтверждения, где я хотел бы показать некоторую информацию о только что вставленной регистрации. На странице подтверждения я делаю запрос Hibernate по userId, чтобы получить только что вставленного пользователя. Затем я использую следующие свойства для заполнения моей модели:

  • User.getName ()
  • User.getEmail ()
  • User.getBlah ()
  • User.getReigstrations (). iterator.next ()

Тот, что выделен жирным шрифтом, генерирует исключение NoSuchElementException, поскольку в наборе нет элементов. В наборе должна быть одна регистрация. Если я закрываю браузер, запускаю новый и возвращаюсь к той же ссылке, которая вызвала исключение, ЭТО РАБОТАЕТ! В комплекте есть регистрация.

Я предполагаю, что он не перезагружает связанные объекты таблиц, когда я запрашиваю своего пользователя, но либо извлекает данные из кэша, либо предполагает, что больше ничего не было добавлено с момента сохранения пользователя. Кто-нибудь знает способ заставить Hibernate перезагрузить эти данные?

К сожалению, я не могу просто получить Регистрацию по UserId, потому что он сопоставляет UserId со всем объектом User (посредством генерации объекта, потому что User является внешним ключом).

Надеюсь, это имеет смысл. Любая помощь приветствуется. Я открыт для другого подхода к достижению этой цели. Спасибо!

1 Ответ

1 голос
/ 11 марта 2011

Трудно диагностировать точную проблему, потому что вы не говорите, когда закрываете сессии, и в какой сессии / транзакции вы получаете своего пользователя.Но я полагаю, что проблема заключается в том, что вы не поддерживаете две стороны отношений при вставке новой регистрации.

Вы должны указать пользователя при регистрации и добавить регистрацию в список регистраций пользователя.

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