У меня часто возникало исключение "объект ссылается на несохраненный переходный процесс ..." после добавления столбца @Version. Вот как я решил это в моем случае:
В моем сценарии проблема заключалась в внешних ключах.Код был написан так, что вместо загрузки упомянутого объекта создавал новый экземпляр и устанавливал первичный ключ , надеясь, что Hibernate сможет найти реальный.Я повторяю: до @Version все работало нормально.
Иллюстрирование:
Рассмотрим объект класса B
с идентификатором 1
, который существует в базе данных, и теперь мы сохраняемновый экземпляр A
.
ранее (безрезультатно) (выдавал исключение после добавления @Version):
a.setB (новый B (1));
sf.getCurrentSession (). save (a);
исправлено (работает хорошо) - использование @Версия без проблем:
a.setB ((B) sf.getCurrentSession (). Get (B.class, 1));
sf.getCurrentSession (). Save (a);
При отладке Hibernate я обнаружил, что он выполняет дополнительную проверку при наличии столбца @Version.
Итак, я считаю, что люди, имеющие эту ошибку, тоже не являютсязагружая объекты, на которые они пытаются сослаться (что в любом случае лучше) или они действительно пытаются сохранить новый экземпляр B
(например), но не настроили каскадное сохранениеза это.