У меня странная проблема. В веб-приложении J2ee с spring, smartgwt и hibernate случается, что у меня есть класс A, у которого есть набор класса B, оба они сопоставлены с таблицей A и таблицей B.
Я написал простой тестовый пример для тестирования менеджера сервисов, который должен выполнять вставку, обновление, удаление и все работает, как ожидается, особенно во время вставки. В конце у меня есть одна запись в A и записи в B с внешним ключом к A.
Но когда я пытаюсь вызвать службу из веб-приложения, сущность в B сохраняется без ссылки на внешний ключ.
Я уверен, что услуга такая же. Одна вещь, которую я заметил, заключается в том, что при включении ведения журнала гибернации кажется, что когда служба вызывается из приложения, выполняется еще одно обновление:
- вставка A
- вставка B
- обновление A
- обновление B
- обновление B (только внешний ключ)
- обновление A <--- ??? </li>
- обновление B <--- ??? </li>
Вместо этого при запуске тестового примера junit обновление выглядит следующим образом:
- вставить A
- вставка B
- обновление A
- обновление B
- обновление B (только внешний ключ)
Полагаю, что последнее обновление вызывает ошибку, может быть, это перезапись значений.
Учитывая, что приложение использует Spring, с хорошо известным механизмом DAO + Manager, где я могу исследовать, чтобы решить эту проблему? Кто-то сказал мне, что сессия не закрыта, поэтому hibernate сделает еще одно обновление, прежде чем сам выпустить объекты.
Я почти уверен, что все настройки hbm, xml и всего остального в порядке ... но я могу ошибаться.