当反映实体中的更改时,EntityManager em.remove()和em.persist()不会反映在相同的上下文中

时间:2013-09-05 08:54:04

标签: java jpa persistence persist

我打电话给

 SomeEntity someEntity = em.find(EntityPK.Class,entityPK);
 em.Remove(entityPK);

然后坚持使用相同的主键

 em.persist(someEntity)

抛出具有主键的实体已存在的SQLIntegrityContraintViolatinException。

如果我改变了

someEntity.setName("Test");

然后用

返回同一个实体
someEntity = em.find(EntityPK.Class,entityPK);

它让我用

更新了someEntity
 someEntity.getName()

返回'测试'。

someEntity中的更改会在未反映删除时反映出来。

我是JPA的新手,我们将不胜感激。

1 个答案:

答案 0 :(得分:1)

重新制作物品通常不是一个好主意。最好为新对象使用新id,例如生成的id。

如果你必须转发和反对,尝试在单独的事务中执行它,或者至少在删除后调用flush()以首先从数据库中删除它。