h2 jpa删除方法不能正常工作java

时间:2016-06-04 00:13:06

标签: java database jpa h2 entitymanager

我试图测试此方法以从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。

1 个答案:

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

}