TransientObjectException при сохранении ссылок на объекты в HibernateJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 TransientObjectException при сохранении ссылок на объекты в Hibernate

Сообщение Anonymous »

Я столкнулся с TransientObjectException при попытке создать и сохранить объект Activity, который ссылается на объект Methodology через таблицу соединений ActivityMethodology. Несмотря на то, что объект методологии найден в базе данных и управляется, я все равно сталкиваюсь со следующей ошибкой при попытке сохранить связь:
org.hibernate.TransientObjectException: объект ссылается на несохраненный временный процесс экземпляр — сохраните временный экземпляр перед очисткой: com.unfccc.activityservice.entity.Methodology
Сущности
Вот упрощенная версия моих отношений сущностей:
1.)Активность: содержит множество сущностей методологии через объединяющую таблицу.
2.)Методология: простая сущность, которая может существовать независимо и должна быть связана с действиями.
3.)ActivityMethodology : объект объединяющей таблицы, который соединяет действие и методологию с помощью составного ключа.
Что я пробовал
Проверка управляемости методологии: прежде чем связать ее с действием, я проверяю если методология уже существует в базе данных, и убедитесь, что она управляется EntityManager.
Сохранение или слияние: в зависимости от того, существует ли методология, я либо сохраняю ее, либо объединяю, чтобы гарантировать ее в управляемом состоянии.
Сброс и обновление: я добавил явные вызовы флеш() и обновления() после сохранения или слияния, чтобы гарантировать синхронизацию состояния с базой данных.
Сброс и обновление. p>
Несмотря на это, я все равно получаю исключение TransientObjectException.
List activityMethodologies = new ArrayList();
if (activity.getMethodology() != null && !activity.getMethodology().isEmpty()) {
for (Methodology methodology : activity.getMethodology()) {
// Check if the Methodology already exists
Methodology existingMethodology = methodologyService.findByMethodologyName(methodology.getMethodologyName());

if (existingMethodology == null) {
// Persist new Methodology
log.info("Persisting new methodology...");
entityManager.persist(methodology);
entityManager.flush(); // Ensure it's saved in the DB
existingMethodology = methodology;
} else {
log.info("Methodology is already managed.");
}

log.info("Methodology is now managed with ID: " + existingMethodology.getMethodologyId());

// Create ActivityMethodology link
ActivityMethodology activityMethodology = new ActivityMethodology();
ActivityMethodologyId id = new ActivityMethodologyId(activity.getActivityNumber(), existingMethodology.getMethodologyId());
activityMethodology.setId(id);
activityMethodology.setActivity(activity);
activityMethodology.setMethodology(existingMethodology);

log.info("Persisting ActivityMethodology...");
activityMethodologyService.saveActivityMethodology(activityMethodology);
}
}

Журналы
Вот журнал, показывающий, что идентификатор методологии получен правильно, но затем возникает ошибка.
24 октября 2024 г. 14:08:38.043 INFO Существующая методология найдена с идентификатором: d2fd8cbf-8af6-44d9-b349-1f75dc7f1e3c
2024-10-24 14:08:38.044 INFO Методология уже управляется.
2024-10-24 14:08:38.100 ОШИБКА Ошибка создания действия
org.hibernate.TransientObjectException: объект ссылается на несохраненный временный экземпляр — сохраните временный экземпляр перед очисткой: com.unfccc.activityservice.entity.Methodology
Мой вопрос
Почему я все еще получаю исключение TransientObjectException, хотя гарантирую, что методология управляется EntityManager?
Как устранить эту ошибку и правильно сохранить ее? связь между активностью и методологией через ActivityMethodology?
Изменить: 25.10.2024: это метод, в котором я сохраняю активность
/**
* Saves or updates an activity.
*
* @param activity The activity to save or update.
* @return The saved or updated activity.
*/
@Transactional
@Override
public Activity saveActivity(Activity activity) {
return activityRepository.save(activity);
}


Подробнее здесь: https://stackoverflow.com/questions/791 ... -hibernate
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • TransientObjectException при сохранении ссылок на объекты в Hibernate
    Anonymous » » в форуме JAVA
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous
  • TransientObjectException при сохранении ссылок на объекты в Hibernate
    Anonymous » » в форуме JAVA
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • TransientObjectException при сохранении ссылок на объекты в Hibernate
    Anonymous » » в форуме JAVA
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous
  • TransientObjectException при сохранении ссылок на объекты в Hibernate
    Anonymous » » в форуме JAVA
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • Удаление Entity после обновления до Hibernate 6.6.1.FINAL из 6.4.4.FINAL вызывает исключение TransientObjectException
    Anonymous » » в форуме JAVA
    0 Ответы
    62 Просмотры
    Последнее сообщение Anonymous

Вернуться в «JAVA»