java - JPA EntityManager 在删除时不会引发约束违规

标签 java hibernate jpa

对于我的项目,我必须允许用户删除一些数据库条目。但就我而言,它现在应该失败,因为数据库中有一些限制。我无法显示数据库 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 是该实体中的主键(不确定它是否那么简单,因为您有泛型)。

在我看来,合并没有多大意义,因为您删除了实体。

关于java - JPA EntityManager 在删除时不会引发约束违规,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53118106/

相关文章:

java - 检测手机 hibernate 时的手势

java - 使用 Mockito 验证是否使用包含子字符串的参数调用了方法

java - 编辑 JTable 行

java - 在 Spring Data 中进行事务性删除?

java - 如何在 hibernate 中更新多个表?

java - Play + JPA + Hibernate + PostgreSQL : Cannot create Tables

java - 了解 Scatter Gather 的企业集成?

java - Hibernate 检索/显示已删除的对象,即使已提交

PostgreSQL、枚举、JPA、EclipseLink

json - 具有 ManyToOne 关系的 JPA 实体 JSON 序列化