IllegalStateException:存储实体<entity>时发生错误实体副本<entity>已分配给不同的实体<entity_copy> </entity_copy> </entity> </entity>

时间:2013-08-09 12:48:24

标签: hibernate persistence

经过大量谷歌搜索后,我没有找到问题的答案,除了降级hibernate版本。但我在2003年的类似帖子中遇到了这种情况。

问题:

//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()操作。 我错了吗?
  3. PS

    1. 如果重要实体 - &gt; EntityDetail lazy,orphanRemoval = true,one-2-one 关系链接
    2. 我重写了equals()和hashCode()方法。

1 个答案:

答案 0 :(得分: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