我正在编写一些测试以确保所有CRUD方法都正常工作。他们每个人都工作正常,但测试删除方法似乎有点棘手。
在我的测试中,我这样做:
// remove
a = dao.select(1); // previously inserted in the DB
dao.remove(a);
assertNull(dao.select(a.getId()));
DAO类(仅选择和删除):
@Override
public AtividadeComercial select(int id) {
return em.getReference(AtividadeComercial.class, id);
}
@Override
public void remove(AtividadeComercial e) {
EntityTransaction t = em.getTransaction();
boolean active = t.isActive();
if(!active)
t.begin();
em.remove(em.getReference(e.getClass(), e.getId()));
if(!active)
t.commit();
}
但是测试总是在javax.persistence.EntityNotFoundException
之后抛出remove
。这是正常行为还是真的错了?对不起,如果这看起来很明显,但我找不到答案。
答案 0 :(得分:0)
getReference()
永远不会返回null。阅读其文档:
获取一个实例,其状态可能会被懒散地取出。如果数据库中不存在请求的实例,则在首次访问实例状态时抛出EntityNotFoundException。
此方法返回应该存在的实体的代理。它甚至没有进行数据库查询来检查实体是否存在:它假定它存在。如果稍后初始化代理,并且实体不存在,那么您将获得EntityNotFoundException。