我正在打电话
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()
返回“测试”。
反射(reflect)了 someEntity 中的更改,但未反射(reflect)其删除。
我是 JPA 的新手,如有任何帮助,我们将不胜感激。
最佳答案
转世对象通常不是一个好主意。最好对新对象使用新的 id,例如生成的 id。
如果您必须转世并反对,请尝试在单独的事务中进行,或者至少在删除之后调用flush()以首先将其从数据库中删除。
关于java - EntityManager em.remove() 和 em.persist() 未反射(reflect)在同一上下文中,而反射(reflect)了实体中的更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18631879/