Ця стаття є дзеркальною статтею машинного перекладу, будь ласка, натисніть тут, щоб перейти до оригінальної статті.

Вид: 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)
Вищезазначені дві аномалії часто зустрічаються у відображенні «один до багатьох» і «багато до багатьох»




Причини помилок:

Міф:Ви не можете створити новий об'єкт користувача, а потім отримати інформацію користувача на основі user ID і призначити її цьому об'єкту, щоб інший об'єкт із тим самим значенням ідентифікатора вже був пов'язаний із помилкою сесії!!





Попередній:Використання динамічних у C# 4.0
Наступний:Клонування неглибокої реплікації об'єктів c#
Застереження:
Усе програмне забезпечення, програмні матеріали або статті, опубліковані Code Farmer Network, призначені лише для навчання та досліджень; Вищезазначений контент не повинен використовуватися в комерційних чи незаконних цілях, інакше користувачі несуть усі наслідки. Інформація на цьому сайті надходить з Інтернету, і спори щодо авторських прав не мають до цього сайту. Ви повинні повністю видалити вищезазначений контент зі свого комп'ютера протягом 24 годин після завантаження. Якщо вам подобається програма, будь ласка, підтримуйте справжнє програмне забезпечення, купуйте реєстрацію та отримайте кращі справжні послуги. Якщо є будь-яке порушення, будь ласка, зв'яжіться з нами електронною поштою.

Mail To:help@itsvse.com