Не могу сохранить сущность - PullRequest
0 голосов
/ 07 марта 2011

Я использую JPA 2.0 для своего проекта.

Я удаляю и сущность, а затем пытаюсь сохранить те же данные, но выдает:

org.hibernate.ObjectDeletedException: deleted instance passed to merge.

Нижечто я выполняю:

for(Education edu : educations) {
    entManager.remove(edu);
    Education tempEdu = new Education();
    tempEdu.setCourse(edu.getCourse());
    tempEdu.setInstitution(edu.getInstitution());
    tempEdu.setPlace(edu.getPlace());
    tempEdu.setFromDate(edu.getFromDate());
    tempEdu.setToDate(edu.getToDate());
    tempEdu.setMember(updatedMem);
    entManager.merge(tempEdu);
}

Можете ли вы сказать мне, как удалить сущность и затем сохранить ее данные в другой сущности?

С уважением,

Сатья

Ответы [ 2 ]

0 голосов
/ 12 марта 2011

Как опубликовано вами в комментариях - Если какая-либо сущность удалена / отредактирована / добавлена ​​в пользовательском интерфейсе, я удаляю все связанные сущности, а затем воссоздаю те, которые исходят из пользовательского интерфейса ...

Ведение двух списков, один для сущностей в базе данных и другой для пользовательского интерфейса.

//---

dbEntries.removeAll(uiEntries);  // dbEntries will have entities to be deleted 

for(Education edu : dbEntries){

  em.remove(edu);  // Deleting entries not found in UI
}

for(Education edu : uiEntries){

  em.merge(edu);  // Updating existing entity else persisting new one
}

//---

Таким образом, вы можете достичь того, что пытаетесь до сих пор, укажите, если я ошибся.

Иначе в вашем коде, попробуйте объединить tempEdu перед удалением edu.

0 голосов
/ 07 марта 2011

Я думаю, что операция remove касается некоторых отношений, которые вы используете позже:

tempEdu.setCourse(edu.getCourse());
tempEdu.setInstitution(edu.getInstitution());
tempEdu.setPlace(edu.getPlace());

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

. И это приводит к вопросу, уже заданному axtavt - чего ты пытаешься достичь?В итоге вы удалите кучу объектов, а затем воссоздаете их и сохраняете обратно ...

...