#java #hibernate
#java #гибернация
Вопрос:
Я сталкиваюсь с некоторыми проблемами с гибернацией. Нам нужно сохранить объект с его дочерними элементами. У каждого дочернего элемента есть составной первичный ключ. Одно свойство ключа будет вставлено триггером. Перед вызовом из программы будет установлено другое свойство saveOrUpdate(Object)
.
Но мы не можем сохранить объект. Гибернация выдает исключение Same identifier is already exists in the session
.
Я пробовал session.clear()
, но получаю то же исключение. Когда я попытался session.merge()
, был сохранен только последний дочерний элемент, другие были проигнорированы.
Комментарии:
1. можете ли вы опубликовать файлы hbm или java объекта, который вы пытаетесь сохранить.
Ответ №1:
Если вам не понадобятся в том же сеансе гибернации объекты, которые были сохранены, вы можете отсоединить их сразу после сохранения с помощью Session.evict()
:
// children is the collection of detached children, ready to save
for (Child child : children){
session.save(child);
session.evict(child);
}
Кроме того, может быть полезна эта запись на форумах гибернации: перед вставкой триггера и генератора идентификаторов. Существует реализация an AbstractPostInsertGenerator
, которую вы можете интегрировать в соответствии с вашими потребностями.