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();
}
}
我正在尝试测试此方法以从 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();
}
}