Эта статья является зеркальной статьёй машинного перевода, пожалуйста, нажмите здесь, чтобы перейти к оригиналу.

Вид: 21246|Ответ: 0

[Источник] другой объект с тем же значением уже был связан с...

[Скопировать ссылку]
Опубликовано 01.07.2016 10:48:52 | | | |
другой объект с тем же значением идентификатора уже был связан с сессией: 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)
Две вышеуказанные аномалии часто встречаются в отображениях «один к многим» и «многие-в-многие»




Причины ошибок:

Миф:Нельзя создать новый пользовательский объект, а затем получить информацию пользователя на основе идентификатора пользователя и назначить её этому объекту, так что другой объект с тем же значением идентификатора уже был связан с ошибкой сессии!!





Предыдущий:Использование динамического в C# 4.0
Следующий:Клонирование поверхностной репликации объектов c#
Отказ:
Всё программное обеспечение, программные материалы или статьи, публикуемые Code Farmer Network, предназначены исключительно для учебных и исследовательских целей; Вышеуказанный контент не должен использоваться в коммерческих или незаконных целях, иначе пользователи несут все последствия. Информация на этом сайте взята из Интернета, и споры по авторским правам не имеют отношения к этому сайту. Вы должны полностью удалить вышеуказанный контент с компьютера в течение 24 часов после загрузки. Если вам нравится программа, пожалуйста, поддержите подлинное программное обеспечение, купите регистрацию и получите лучшие подлинные услуги. Если есть нарушение, пожалуйста, свяжитесь с нами по электронной почте.

Mail To:help@itsvse.com