Здравствуйте имеются 3 entity (Doctor, Patient, Recipe) которые с помощью Hibernate замапленны в БД. Recipe имеет в качестве поля Doctor и Patient.
При обновлении объекта (обновляются текстовые поля, не ссылки на другие сущности) Recipe загруженного в память вылетает исключение:
TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing
Обновление Recipe происходит следующим образом:
Recipe old_recipe = recipeService.findById(id);
old_recipe.setPriority(priority);
old_recipe.setDescription(description);
recipeService.update(old_recipe);
Метод update:
@Override
public void update(Recipe recipe) {
Session session = sessionFactory.getCurrentSession();
session.update(recipe);
}
Как правильно сделать обновление Recipe, если мне НЕ нужно пересохранять/пересоздавать имеющиеся у этого объекта внешние сущности: Doctor, Patient?
Исключение выдается, когда вы
хотите передать временный экземпляр методу Session, который ожидает постоянный экземпляр.
Перед запуском временного экземпляра убедитесь, что вы загрузили ссылки, прежде чем передавать этот временный экземпляр в метод save. Если у вас нет постоянных ссылок, которые сначала сохраняют объекты, которые не имеют ссылок на другие временные экземпляры.
Решением было использовать:
session.refresh(recipe.getPatient());
session.refresh(recipe.getDoctor());
для связных сущностей объекта Recipe который обновляю.
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости