powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Вопрос по откату транзакции
9 сообщений из 9, страница 1 из 1
Вопрос по откату транзакции
    #38611472
JulT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет!
Есть метод:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
 public void onEvent(Event evt) {

                 Factory.getInstance().getLigaDAO().deleteLiga(selectedLiga);

                 Clients.showNotification("Успешно удалено", "info", null, "middle_center", 2000);
                   
             } catch (Exception ex) {
                 Clients.showNotification("Возникли проблемы с удалением", "error", null, "middle_center", 2000);
                 }


Кусочек кода LigaDAO для удаления:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
 public void deleteLiga(Liga liga) throws SQLException{
            Session session = null;
            try {
                session = HibernateUtil.getSessionFactory().openSession();
                session.beginTransaction();
                session.delete(liga);
                session.getTransaction().commit();
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                if (session != null && session.isOpen()) {
                    session.close();
                }
            }
      }  


Пусть, в методе onEvent случилось какое-то исключение, например деление на 0. Как сделать так, чтобы произошел откат транзакции удаления сущности при возникновении такого исключения?
Спасибо
...
Рейтинг: 0 / 0
Вопрос по откату транзакции
    #38611481
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Google -> Spring Declarative Transaction management.

Если руками лисапедить, то надо глобальный интерцептор вешать, который управляет транзакцией и сессией. А не открывать\закрывать сессии в каждом методе.
...
Рейтинг: 0 / 0
Вопрос по откату транзакции
    #38611496
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вы реально вот этот код в каждый метод копипастите?
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
 public void anyDaoMethod(Arguments args) throws SQLException{
            Session session = null;
            try {
                session = HibernateUtil.getSessionFactory().openSession();
                session.beginTransaction();

                //Do something useful here

                session.getTransaction().commit();
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                if (session != null && session.isOpen()) {
                    session.close();
                }
            }
      }  



Когда вы осознаете что копипаст это плохо и найдете способ отделить полезную нагрузку (session.delete()) от инфраструктуры, тогда и с транзакциями сможете побороться.
...
Рейтинг: 0 / 0
Вопрос по откату транзакции
    #38611534
JulT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,
До Spring-а еще толком не добралась, поэтому пока так мучаюсь... )
...
Рейтинг: 0 / 0
Вопрос по откату транзакции
    #38611538
JulT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я так понимаю правильным было бы писать что-то вроде:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
@Override
    @Transactional(readOnly = false, propagation = Propagation.REQUIRED)
    public boolean delete(Liga liga)
    {
        try
        {
            Session session = sessionFactory.getCurrentSession();
            session.delete(liga);
            return true;
        } catch (Exception e)
        {
            return false;
        }
    }


перед этим настроив конфигурационные файлы для использование Spring, так?
...
Рейтинг: 0 / 0
Вопрос по откату транзакции
    #38611754
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JulTЯ так понимаю правильным было бы писать что-то вроде:
Не совсем. Исключение надо не ловить, а выкидывать наружу. Тогда спринг-обертка узнает что надо бы откатить по этому поводу и транзакцию.

JulTперед этим настроив конфигурационные файлы для использование Spring, так?
Да.
...
Рейтинг: 0 / 0
Вопрос по откату транзакции
    #38611797
JulT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczJulTЯ так понимаю правильным было бы писать что-то вроде:
Не совсем. Исключение надо не ловить, а выкидывать наружу. Тогда спринг-обертка узнает что надо бы откатить по этому поводу и транзакцию.

Т.е. типа так:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
@Transactional(readOnly = false, propagation=Propagation.REQUIRED, rollbackFor=Exception.class)
public void deleteLiga(Liga liga) throws Exception {
   try {
 Session session = sessionFactory.getCurrentSession();
            session.delete(liga);
            return true;
   } catch (Exception up) {
      throw up;
   }
}


Правильно?
...
Рейтинг: 0 / 0
Вопрос по откату транзакции
    #38611800
JulT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сорри, без return true конечно же )
...
Рейтинг: 0 / 0
Вопрос по откату транзакции
    #38611801
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В идеале вот так так:

Код: java
1.
2.
3.
4.
@Transactional
public void delete(Liga liga){
    getSession().delete(liga);
}
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Вопрос по откату транзакции
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]