Обновление entity. TransientObjectException

98
21 февраля 2022, 01:00

Здравствуйте имеются 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?

Answer 1

Исключение выдается, когда вы

хотите передать временный экземпляр методу Session, который ожидает постоянный экземпляр.

Перед запуском временного экземпляра убедитесь, что вы загрузили ссылки, прежде чем передавать этот временный экземпляр в метод save. Если у вас нет постоянных ссылок, которые сначала сохраняют объекты, которые не имеют ссылок на другие временные экземпляры.

Answer 2

Решением было использовать:

session.refresh(recipe.getPatient());
session.refresh(recipe.getDoctor());

для связных сущностей объекта Recipe который обновляю.

READ ALSO
Проблема записи файла на некоторых устройствах через openOutputStream(mUri)

Проблема записи файла на некоторых устройствах через openOutputStream(mUri)

Я пишу написал приложение, которое открывает текстовый файл через Uri: (getContentResolver()openInputStream(mUri))

85
Можно ли на одном AnchorPane менять местами Labl(ы)? [закрыт]

Можно ли на одном AnchorPane менять местами Labl(ы)? [закрыт]

Хотите улучшить этот вопрос? Обновите вопрос так, чтобы он вписывался в тематику Stack Overflow на русском

181
Hibernate, @OneToMany и выборка из базы данных

Hibernate, @OneToMany и выборка из базы данных

Имеются два класса, связанные между собой:

171
Несколько public классов в одном .class-файле

Несколько public классов в одном .class-файле

По какой причине нельзя создать несколько public-классов в одномjava-файле? Почему можно создавать без модификатора доступа?

93