簡體   English   中英

JPA EntityManager不會在刪除時拋出違反約束的情況

[英]JPA EntityManager not throwing Constraint Violation on delete

對於我的項目,我必須允許用戶刪除一些數據庫條目。 但就我而言,它現在應該會失敗,因為數據庫中有一些限制。 我不能顯示數據庫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沒有多大意義。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM