Hibernate: повторное присоединение объекта к сеансу приводит к удалению неинициализированных коллекций - PullRequest
2 голосов
/ 01 ноября 2010

Я заново присоединяю отсоединенный объект с несколькими постоянными коллекциями к новому сеансу Hibernate со следующим фрагментом:

sessionFactory.getCurrentSession().lock(myDetachedObject);

Этот код выполняется в pointcut AspectJ, который запускается всякий раз, когда постоянная коллекция являетсяaccessaged.

Объект не изменяется, пока он отсоединен, и после повторного присоединения я могу получить доступ и изменить постоянные коллекции объекта без проблем.Однако если я не получаю доступ ни к одной из постоянных коллекций после повторного присоединения , тогда, когда я закрываю сеанс и фиксирую свою работу, все постоянные коллекции удаляются из базы данных .Это как если бы я вызывал метод clear() для каждого из них.

Все мои коллекции явно настроены как CascadeType.ALL, и я понял, что при этом они будут правильно присоединены к сеансу как частьсобытия LOCK.Я понимаю, что если у меня нет доступа к любым постоянным коллекциям, то срабатывание точки запускается, пока Hibernate готовится очистить сеанс.Есть ли какой-либо другой способ присоединения объекта к сеансу, который не позволяет Hibernate ненадлежащим образом удалять коллекции?

ОБНОВЛЕНИЕ : я пробовал другие режимы блокировки (LockMode.READ, LockMode.UPGRADE) и методы присоединения (вызов session.update() вместо session.lock()).Это предсказуемо изменило поведение действия присоединения, но не в результате.Коллекции все еще удалены.Я также написал небольшой тест, чтобы подтвердить, что коллекции удаляются, только если объект повторно присоединен во время операции очистки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...