Java JPA EntityManager未在删除时引发约束冲突

Java JPA EntityManager未在删除时引发约束冲突,java,hibernate,jpa,Java,Hibernate,Jpa,对于我的项目,我必须允许用户删除一些数据库条目。但在我的例子中,它现在应该失败了,因为数据库中有一些限制。我无法显示数据库DDL,因为我不允许显示 问题是代码没有抛出任何错误,因此结果是一条消息,表明该项已被删除。但它当然会失败,因为它违反了约束 所以现在我会给用户一个积极的反馈,但是应该是消极的。该项目仍在数据库中,如果该项目未被删除,这将在稍后混淆用户。如果没有违反约束,将删除实体 我删除实体的代码如下所示,T是在扩展类中定义的,不复制代码 提前谢谢 public void delete(f

对于我的项目,我必须允许用户删除一些数据库条目。但在我的例子中,它现在应该失败了,因为数据库中有一些限制。我无法显示数据库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);
}

请将您的删除行替换为以下行:

entityManager.remove(entityManager.getReference(item.getClass(), item.getPk()));
其中PK是该实体中的主键(不确定它是否那么简单,因为您有泛型)


该合并IMO没有多大意义,因为您删除了实体。

您是否尝试直接删除数据库中用户的行?另外,将应用程序置于调试模式以查看生成的SQL命令。是的,已经这样做了。如前所述,存在约束冲突。您可以发布为entityManager.remove(…)生成的SQL命令吗?好的,我现在发现,它没有为此项生成任何SQL命令。我必须覆盖该方法,entityManager在合并对象后删除对象时遇到问题。是的,不能使用泛型,我必须通过扩展类来覆盖这个方法。你的解决方案现在可以解决这个问题了。谢谢大家!@索尔丁先生,我很高兴这对你有帮助。