Java EntityManager em.remove()和em.persist()不反映在同一上下文中,而反映实体中的更改

Java EntityManager em.remove()和em.persist()不反映在同一上下文中,而反映实体中的更改,java,jpa,persistence,persist,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.

我在打电话

 SomeEntity someEntity = em.find(EntityPK.Class,entityPK);
 em.Remove(entityPK);
然后在同一主键上持久化

 em.persist(someEntity)
当具有主键的实体已存在时,将引发SQLIntegrityContraintViolatinException

而如果我改变

someEntity.setName("Test");
然后用

someEntity = em.find(EntityPK.Class,entityPK);
它给了我一个更新过的实体

 someEntity.getName()
返回“Test”

someEntity中的更改会得到反映,而其删除不会得到反映


我是JPA的新手,任何帮助都将不胜感激

转世通常不是个好主意。最好为新对象使用新id,例如生成的id

如果您必须转世和对象,请尝试在单独的事务中执行此操作,或者至少在删除后调用flush(),以首先将其从数据库中删除。

在em.remove()之后调用em.flush(),问题得到解决。