2013-08-09 2 views
3

После многого поиска Google не нашел ответа на мой вопрос, кроме версии для спящего режима спящего режима. Но я столкнулся с такой ситуацией на аналогичной должности, которая датируется 2003 годом.IllegalStateException: произошла ошибка при сохранении объекта <entity> Копия объекта <entity> была назначена другому объекту <entity_copy>

чем проблема:

//in the first session I do 
session1.save(entity); 
session1.getTransaction().commit(); 
session1.close(); 

//in the second session (after client response), I get back the serialized copy of the entity 
entityCopy = deserialize(jsonString); 
entityCopy.setEntityDetail(newDetail); //1 
session2.merge(entityCopy); //EXCEPTION! 

Если строка комментария 1, все работает отлично!

Исключение:

IllegalStateException: Произошла Ошибки при сохранении сущности # 4700 Субъект копия # 4700 был уже назначен на другой объект @ 2e7b134a

Вопросов:

  1. Что не так в моей картине?
  2. Как я понимаю, операция merge() была реализована для тех случаев, когда мы alreadty имеем копию экземпляра в кеше. Я не прав?

PS

  1. Если это важно Entity -> EntityDetail связаны с ленивым, orphanRemoval = правда, один-два-один отношения
  2. I перекрытая equals() и hashCode().

ответ

1

Я решить эту проблему следующим способом: необходимо слияния десериализованное лица, прежде чем продолжить некоторые изменения к нему. (единственное изменение находится в 2 строках):

//in the first session I do 
session1.save(entity); 
session1.getTransaction().commit(); 
session1.close(); 

//in the second session (after client response), I get back the serialized copy of the entity 
entityCopy = deserialize(jsonString); 
entityCopy = (Entity) session.merge(entityCopy); //2 
entityCopy.setEntityDetail(newDetail); 
session2.merge(entityCopy); //all works fine 
Смежные вопросы