h2 jpa 删除方法无效 java

h2 jpa delete method not working java

我正在尝试测试此方法以从 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,但如果给定的实体不在数据库中,它也 returnstrue。有人可以向我解释为什么吗?谢谢

merge 将保留一个实体(如果它不存在)。因此,您正在创建一个实体(使用 merge),然后立即将其删除(使用 remove)。因此不会抛出异常。

如果你想删除一个实体和return一个布尔值,不管你是否删除它,那么你可以做...

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();
    }

}