проблемы с гибернацией с составным первичным ключом

#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 , которую вы можете интегрировать в соответствии с вашими потребностями.