В моем приложении GWT я передаю объект на сервер для сохранения в Hibernate. Этот объект содержит список другого объекта. Каждый элемент в списке содержит карту, которая является другой таблицей Hibernate.
Чтобы выполнить эту транзакцию, я понимаю, что должен сначала:
- Выполните поиск, чтобы получить постоянный объект из базы данных через
Hibernate
- Изменить объект
- Обновление объекта через Hibernate
Вот небольшой код того, что я делаю:
public void saveOrUpdateObject(final Foo foo)
{
Session session = sessionFactory.getCurrentSession();
session.beginTransaction();
Object lookup = myDAO.getObject(foo.getUniqueValue());
if (lookup != null) {
lookup.getList().clear();
lookup.addAll(foo.getList());
myDAO.update(lookup);
}
else {
myDAO.save(foo);
}
}
Используя этот метод, я иногда получаю HibernateException:
org.hibernate.HibernateException: A collection with cascade="all-delete-orphan" was no longer referenced by the owning entity instance: my.Foo.list
Как правильно обновить объект, содержащий коллекцию, с помощью Hibernate?