我在使用 EnitityManager 删除对象时遇到问题。我有像名字这样的参数。当我为用户添加此参数然后将其删除时,它工作正常。但是 EntityManager 记住已删除参数的 id(Id 是主键 - 自动增量)。当我再次为用户添加此参数时 - EntityManager 将行添加到数据库,但它保留第一个 persit() 的 id。因此,如果我再次删除参数值 - EM 不会删除参数 - 它会记住第一个参数的 id,因此没有具有此 id 的参数。
我的源代码是:
if (!param.isParameterFilled()) {
if (param.getId() != null) {
param = getEmGap().merge(param);
getEm().remove(param);
getEm().flush();
}
return;
}
if (param.getId() == null) {
getEm().persist(param);
} else {
getEm().merge(param);
}
getEm().flush();
}
也许问题与条件有关: if(param.getId() == null) - 在这种情况下(在第一次添加和删除之后) id != null - > 但在 DB 中没有 EM 知道的 id 参数。我不知道如何解决这个问题。而且我不知道在这种情况下EM应该如何工作?在调用 remove() 和 flush() 之后,EM 是否应该设置 Id = null。或者persist() 和flush() 应该重新加载参数的ID?
谢谢