我试图删除一个具有唯一 PK 的实体,例如:80253
我通过执行以下代码行来删除此实体:
myEntityType1 = getEntityManager().find(MyEntityType1.class, 80253);
getEntityManager().remove(myEntityType1);
getEntityManager().flush();
这些代码实际上正确地从我的数据库及其所有级联对象中删除了行,对此我感到非常高兴。现在,当我现在需要创建一个使用相同主键的类似实体(现在应该消失了?)时,问题就出现了。
MyEntityType2 myEntityType2 = new MyEntityType2 ();
myEntityType2.copyData(myEntityType1); //access the data from the other object
//and retrieves the id 80253. myEntityType2 now has 80253 as ID.
getEntitymanager().persist(myEntityType2);
现在这是我得到唯一约束 SQL 错误的地方。我试图插入一个已经存在的 ID,并且更改会自动回滚(不再删除旧实体)。这发生在我在记录器中看到 toplink 已删除旧实体的记录之后。
有谁知道这是怎么发生的,为什么它不起作用?作为记录,我尝试合并、关闭、清除 entityManager,但似乎没有任何效果。
在我看来,JPA 可能会做一些糟糕的缓存或其他事情。我希望有人能给我一个好的答案!=)
更新:唯一 ID 约束不再存在问题,但我创建了一个具有相同主键的新子类,该主键已被删除,但出现以下异常:
Exception Description: Trying to invoke [setApprovedWhen] on the object [null]. The
number of actual and formal parameters differs, or an unwrapping conversion has failed.
Internal Exception: java.lang.IllegalArgumentException: object is not an instance of
declaring class
在我看来,它不会让我将对象更改为不同的子类?