对于我的项目,我必须允许用户删除一些数据库条目。但就我而言,它现在应该会失败,因为数据库中有一些限制。我无法显示数据库DDL,因为我不允许这样做。
问题在于代码未引发任何错误,因此结果是一条消息,指出该项目已删除。但是当然会失败,因为违反约束。
因此,在此刻,我将为用户提供有关此操作的正面反馈,但应为负面。该项目仍在数据库中,如果未删除该项目,稍后将使用户感到困惑。如果没有违反约束的情况,该实体将被删除。
我删除实体的代码如下所示,T是在扩展类中定义的,而不是复制代码。
谢谢!
public void delete(final T item) throws DAOException {
EntityManager entityManager = EntityManagerFactoryCentral.getEntityManager();
EntityTransaction transaction = entityManager.getTransaction();
try {
transaction.begin();
entityManager.remove(entityManager.contains(item) ? item : entityManager.merge(item));
transaction.commit();
} catch (Exception ex) {
ex.printStackTrace();
try {
transaction.rollback();
} catch (Exception rollbackEx) {
logDatabaseError(rollbackEx);
}
logDatabaseError(ex);
throw new DAOException(ex.getMessage(), ex);
} finally {
entityManager.close();
}
logTransactionSuccess(item, REMOVED_FROM);
}
答案 0 :(得分:1)
请用这一行替换您的删除行:
entityManager.remove(entityManager.getReference(item.getClass(), item.getPk()));
其中PK是您在该实体中的主键(由于具有泛型,因此不确定它是否那么简单)。
由于您删除了该实体,因此合并IMO没有多大意义。