другой объект с тем же значением идентификатора уже был связан с сессией: 398fdbba-57b8-4d3d-b84b-4c0c0b497f02, сущности: XXX
Я сталкивался с этой ошибкой всего дважды, но так и не нашёл хорошего решения, и эта ошибка возникла
Причина, вероятно, хорошо известна, потому что в гибернации в одной сессии есть два одинаковых логотипа
Однако, если это другая сущность, эта ошибка будет зафиксирована при запуске операции saveOrUpdate(object).
Хе-хе, может, ты скажешь, что нет разницы между тем, что ты говоришь, и тем, что не говоришь, признаю, хе-хе, я не знаю деталей
Почему возникла эта ошибка? Иначе её бы давно не решили, теперь дайте временную
Решение — дать таким людям, как я, которые не могут найти корень причины, способ продолжать реализовать
(Конечно, это верно, но не начинается с причины) На самом деле, решить эту проблему очень просто — просто выполнить операцию session.clean()
Но вы выполнили операцию saveOrUpdate(object) после операции очистки, что возможно
«Нашёл два представления одной коллекции», я искал много информации.
Нет хорошего объяснения, и эта статья помогает больше всего
http://opensource.atlassian.com/projects/hibernate/browse/HHH-509。
Наконец, это можно решить методом session.refresh(object), обратите внимание, что когда объект не является
Если это объект с данными в базе данных, вы не можете использовать фактор session.refresh(object)
Для обновления — это рефэтчирование объекта из гибернирующей сессии, если в сессии объекта нет
Если этот объект есть, ошибка будет сообщена, поэтому нужно судить перед использованием saveOrUpdate(object).
Сломайте
Конечно, самое простое решение этой проблемы — использовать merge(), который идёт с Hibernate.
метод. Однако мне всегда кажется, что когда возникают проблемы, я использую очень полезный метод, который приходит в этом софте
(по сравнению с saveOrUpdate(), save(), update()) кажется очень неприятным. Позже я также обнаружил, что эта ошибка часто появляется при отображении «один к многим» и «многие-в-многие», пожалуйста, окажитесь здесь
Будьте осторожны при использовании отображения «один к многим» и «многие к многим» Гибернативное устранение и обработка неисправностей 1、Другой объект с тем же значением идентификатора уже был связан с сессией。 Причина ошибки: В гибернации в одной сессии есть две идентичные идентичности, но разные сущности. Обходной путь 1: session.clean() P.S.: Если вы выполняете операции по изменению состояния данных, такие как saveOrUpdate(object), после очистки, вы можете получить исключение «Найдено два представления одной коллекции». Обходной путь 2: session.refresh(object) P.S.: Если объект не является объектом с данными в базе данных, вы не можете использовать session.refresh(object), потому что метод предназначен для рефэтча объекта из гибернирующей сессии; если в сессии объекта нет, ошибка будет сообщена, поэтому нужно решать это до использования saveOrUpdate(object). Решение 3: session.merge(object) P.S.: Рекомендуется использовать собственный метод Hibernate. 2. Найдено два представления одной и той же коллекции Причина ошибки: см. 1. Обходной путь: session.merge(object) Две вышеуказанные аномалии часто встречаются в отображениях «один к многим» и «многие-в-многие»
Причины ошибок:
Миф:Нельзя создать новый пользовательский объект, а затем получить информацию пользователя на основе идентификатора пользователя и назначить её этому объекту, так что другой объект с тем же значением идентификатора уже был связан с ошибкой сессии!!
|