Возник тут у меня вопросик. Кода сейчас под рукой нет, но помощь нужна срочно, так что сначала постараюсь словами обьяснить.
Итак есть сущности A, B, C. Ссылаются они друг на друга вот так: A -> B -> C. Хранятся соответственно в трех таблицах.
Есть метод обьекта, который где-то внутри открытой транзакции пытается загрузить обьект A (и соответственно связанные с ним B и C) по его идентификатору. В штатном режиме все работает отлично. Но вот возникла ситуация, когда в цепочке A -> B -> C отсутствует последний элемент, то есть в таблице С нет записи с идентификатором указанным в таблице B. При этом бросается "org.hibernate.ObjectNotFoundException", что есть правильно. Однако с точки зрения логики моей программы эта ошибка не должна приводить к фатальным последствиям, то есть я ее ловлю, пишу в лог и продолжаю работать дальше. И вот здесь возникает проблема. При попытке закоммитить транзакцию бросается новая ошибка типа "org.hibernate.HibernateException: Found two representations of same...". Анализ стектрейса показывает, что происходит эта беда при session.flush() что случается перед коммитом транзакции. Причем в сессии я вижу висящим
обьект A загрузка которого вызвала ошибку №1 (и попытка сохранить который приводит к ошибке №2).
Вопрос такой — почему вообще обьект А оказался в сессии — ведь он не был до конца загружен, то есть по идее находится в невалидном состоянии? Как с этим бороться?