java - EntityManager em.remove() 和 em.persist() 未反射(reflect)在同一上下文中,而反射(reflect)了实体中的更改

标签 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()

返回“测试”。

反射(reflect)了 someEntity 中的更改,但未反射(reflect)其删除。

我是 JPA 的新手,如有任何帮助,我们将不胜感激。

最佳答案

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

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

关于java - EntityManager em.remove() 和 em.persist() 未反射(reflect)在同一上下文中,而反射(reflect)了实体中的更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18631879/

相关文章:

java - gridbaglayout 中的 JTextfield 全宽

java - 获取资源的本地文件路径

java - 将列表参数设置为 native 查询

hibernate - 为什么我在尝试构造 JPQL 连接查询时得到无效路径?

android - Realm 一对多关系不持久

java - hibernate 自动加入条件

java - Hibernate HQL LEFT JOIN 的执行与等效 SQL 不同

java - 更新 Textarea 中的实例变量 (Java)

java - JPA实体没有主键?

java - 在一个相对较大的应用程序中应该如何使用实体管理器来管理数据库事务?