Как обновить объект, если есть какие-либо исключения при удалении его в Hibernate? - PullRequest
0 голосов
/ 03 мая 2020

Я работаю над функцией удаления, которая обновляет объект, если он присутствует в другом объекте. В моем примере я удаляю элементы из счета, поэтому я хотел бы переименовать элемент как «удаленный», если hibernate выдает исключение постоянства.

Сначала я попытался:

 public boolean delete(T entity) {
    LOGGER.info("I want to delete: " + entity);
    try {
        getCurrentSession().remove(entity);
        getCurrentSession().flush();
    }catch (PersistenceException exception){
        LOGGER.error("returning false");
        getCurrentSession().update(entity);
        return false;
    }
    return true;

}

Я получаю

org.hibernate.ObjectDeletedException: удаленный экземпляр передан в update ()

Я думаю, это потому, что мне нужно закрыть текущий сеанс и работать на еще один, поэтому я попытался:

public boolean delete(T entity) {
    LOGGER.info("I want to delete: " + entity);
    try {
        getCurrentSession().remove(entity);
        getCurrentSession().flush();
    }catch (PersistenceException exception){
        LOGGER.error("returning false");
        session.close();
        session = getSessionFactory().openSession();
        getCurrentSession().update(entity);
        return false;
    }
    return true;

}

Но это дает мне

Ошибка обработки запроса; вложенное исключение: java .lang.IllegalStateException: транзакция уже активна

Я пытался использовать вторую транзакцию вместо повторного использования той же самой, но в конечном итоге с той же ошибкой

1 Ответ

0 голосов
/ 03 мая 2020

Только что решил! Приведенный выше код был из моего DAO, и я использовал @Transactionnal в своей бизнес-логи c, поэтому я просто добавил

@ Transactional (распространение = REQUIRES_NEW)

в мой метод удаления там и он работал

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