我试图测试此方法以从h2数据库中删除实体:
public boolean delete(T entity) {
if (entity == null) {
throw new IllegalArgumentException();
}
boolean ret = true;
EntityManager em = entityManager();
try {
EntityTransaction tx = em.getTransaction();
tx.begin();
em.remove(em.merge(entity));
tx.commit();
} catch (RollbackException ex) {
ret = false;
} finally {
em.close();
}
return ret;
}
如果实体在数据库中并且将其删除,则该方法返回true,但如果给定的实体不在数据库中,则它也返回true。有人能解释一下为什么吗? THX。
答案 0 :(得分:2)
merge
将保留该实体。因此,您正在创建一个实体(使用merge
),然后立即将其删除(使用remove
)。因此没有抛出异常。
如果你想删除一个实体并返回一个布尔值,无论你是否删除它,那么你可以做...
public boolean delete(T entity) {
if (entity == null) {
throw new IllegalArgumentException();
}
EntityManager em = entityManager();
EntityTransaction tx = em.getTransaction();
try {
tx.begin();
em.refresh(entity);
em.remove(entity);
tx.commit();
return true;
} catch (EntityNotFoundException ex) {
tx.rollback();
return false;
} catch (RuntimeException ex) {
tx.rollback();
throw ex;
} finally {
em.close();
}
}