JPA EntityManager не создает нарушение ограничений при удалении - PullRequest
0 голосов
/ 02 ноября 2018

Для моего проекта я должен разрешить пользователю удалять некоторые записи базы данных. Но в моем случае это должно произойти сейчас, потому что в базе данных есть некоторые ограничения. Я не могу показать базу данных 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);
}

1 Ответ

0 голосов
/ 02 ноября 2018

Пожалуйста, замените вашу строку удаления на эту:

entityManager.remove(entityManager.getReference(item.getClass(), item.getPk()));

где PK - ваш первичный ключ в этой сущности (не уверен, что это так просто, поскольку у вас есть дженерики).

Это объединение IMO не имеет особого смысла, поскольку вы удаляете сущность.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...