[英]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.