Інший об'єкт із тим самим значенням ідентифікатора вже був пов'язаний із сесією: 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 і призначити її цьому об'єкту, щоб інший об'єкт із тим самим значенням ідентифікатора вже був пов'язаний із помилкою сесії!!
|