0

我正在编写一些测试以确保所有 CRUD 方法都正常工作。他们每个人都工作正常,但测试 remove 方法似乎有点棘手。

在我的测试中,我正在这样做:

// 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。这是正常行为还是真的有问题?抱歉,如果这看起来很明显,但我找不到答案。

4

1 回答 1

0

getReference()永远不会返回null。阅读它的文档:

获取一个实例,其状态可能会被延迟获取。如果请求的实例在数据库中不存在,则在第一次访问实例状态时抛出 EntityNotFoundException。

此方法返回应该存在的实体的代理。它甚至不进行数据库查询来检查实体是否存在:它假定它存在。如果代理稍后被初始化,并且实体不存在,那么你会得到一个 EntityNotFoundException。

于 2013-09-30T14:53:15.050 回答