По сути, у меня есть несколько объектов в этой конфигурации (реальная модель данных немного сложнее):
- A имеет отношение "многие ко многим" с B. (B имеет
inverse="true"
) - B имеет отношения "многие к одному" с C. (я
cascade
установил"save-update"
) - C - это своего рода таблица типов / категорий.
Также, вероятно, следует упомянуть, что первичные ключи генерируются базой данных при сохранении.
С моими данными я иногда сталкиваюсь с проблемами, когда у A есть набор разных объектов B, и эти объекты B относятся к одному и тому же объекту C.
Когда я звоню session.saveOrUpdate(myAObject)
, я получаю ошибку спящего режима , говоря: "a different object with the same identifier value was already associated with the session: C"
. Я знаю, что спящий режим не может вставить / обновить / удалить один и тот же объект дважды в одном сеансе, но есть ли способ обойти это? Это не похоже на такую необычную ситуацию.
Во время моего исследования этой проблемы я видел, как люди предлагали использовать session.merge()
, но когда я это делаю, любые «конфликтующие» объекты вставляются в базу данных как пустые объекты со всеми значениями, установленными на null. Ясно, что это не то, что мы хотим.
[Edit] Еще я забыл упомянуть, что (по не зависящим от меня причинам архитектуры) каждое чтение или запись должно выполняться в отдельном сеансе.