При обновлении сущности с помощью коллекции создается исключение UnresolvableObjectException при удалении элемента коллекции - PullRequest
2 голосов
/ 16 июня 2010

У нас есть двухуровневое приложение Swing, использующее Hibernate.Иногда мы манипулируем объектом в одном сеансе (A), который мы знаем и в другом сеансе (B) (два разных экземпляра Java, одна и та же запись в базе данных).

В этом случае после фиксации и закрытия A,мы обновляем объект в сеансе B, чтобы показать обновленное состояние в пользовательском интерфейсе.Работает нормально в большинстве случаев.

Но если у нас есть объект X с набором Ys, мы получим проблему со следующей последовательностью событий:

B: загрузить X и Ys

A: загрузить X и Ys

A: удалить один Y из коллекции и базы данных

A: очистить, зафиксировать и закрыть сеанс

B: refresh X

На последнем шаге мы получаем исключение UnresolvableObjectException, которое, по-видимому, происходит, потому что B X сохраняет свою коллекцию (вместо обновления самой коллекции) и пытается обновить каждый содержащийся экземпляр Y, что, конечно, не удаетсяпри достижении удаленного.

Если найдено описание проблем с аналогичными проблемами при обновлении коллекций, но

  • нет решения

  • нет сообщений об ошибках

  • без объяснений, что это по замыслу

Так вот мои вопросы: Как я могу решить свою проблему (Даже еслиуказатель на исходный код с постом, который он исправитбудет полезен)?Это ошибка?Если это так, это известный?

1 Ответ

3 голосов
/ 15 ноября 2011

Да, именно так.Я тоже могу воспроизвести эту ошибку.По моему мнению, это ошибка в Hibernate.

Что вы можете сделать: используйте

session.evict(X);
session.load(X, primaryKeyOfX);

вместо session.refresh (X) в потоке B. Тогда это работает.

...