继实体罚球和删除时出现错误:理解:“无法执行分离对象上操作删除”
实体:
@Entity
@NamedQueries({
})
public class Server {
//some attributes
}
我有以下执行以下操作相当简单JUnit测试:
- 实体服务器中创建
@Transactional public class ServerDao { public Server update(Server entity, long userId) { entity.setDeleted(false); if (entity.getId() > 0) { if (userId > 0) { entity.setUpdated(new Date()); entity.setUpdatedby(usersDao.get(userId)); } em.merge(entity); } else { if (userId > 0) { entity.setInserted(new Date()); entity.setInsertedby(usersDao.get(userId)); } em.persist(entity); } return entity; } }
实体服务器被删除
...相同道
public void deleteHardJUnit(Server entity) { em.remove(entity); }
这将抛出类似的异常:
org.apache.openjpa.persistence.ArgumentException:不能对分离对象执行 操作删除 “org.apache.openmeetings.persistence.beans.basic.Server-1”。
如果我更改删除方法:
public void deleteHardJUnit(Server entity) {
if (entity.getId() > 0) {
em.refresh(entity);
em.remove(entity);
}
}
一切“似乎”符合市场预期,不会引发任何异常并记录从数据库中删除工作。
但是我不确定这是什么意思,我们真的需要在删除它之前刷新每个实体吗?因为我之前一直在使用EntityManager.delete而不需要刷新实体。
是您使用的Spring @Transactional注释吗? – Shaun