0

Мне нужно управлять двумя методами Дао в одной транзакции, отказ одного из них должен откат другого. Вызывающий метод находится в сервисном слое. Технология, используемая в родном SQL-запросе Spring и Hibernate. Есть ли способ достичь этого?
Вызов метода :: @Transactional(propagation= Propagation.REQUIRED) public String save(AllowFileTypesForm formBeanObj,Hashtable global)Как управлять 2 методами DAO в одной транзакции?

Вызывается Method1 ::

public boolean deleteData(String strTableName,String strWhereClause) { 
     Session session = sessionFactory.getCurrentSession();         
     String strSqlQuery = null; 
     boolean deleted=false; 
     strSqlQuery = "DELETE FROM Persons where" + strWhereClause; 
     try { 
      Query query=session.createSQLQuery(strSqlQuery); 
      if (query.executeUpdate() <= 0) { 
       throw new SQLException("No row deleted from table "  +strTableName); 
     } 
      else{ 
      deleted=true; 
     } 
    } 

      catch(Exception e){ 
      e.printStackTrace(); 
     } 
     return deleted; 
    } 

Подобно этому методу есть другой метод, который удаляет данные из другой таблицы.

+0

Да. Сделайте свой метод обслуживания транзакционным. Это типичный способ сделать. Почему уже не ваш транзакционный уровень сервиса? Где ваш код? –

+0

Мой сервисный уровень уже транзакционен, но проблема, которую я обнаружил, заключается в том, что откат не выполняется и что я считаю, что причиной является @Transactional, поддерживает сущность, а не вставка строки. Я разместил коды. – Shivayan

+0

Что вы подразумеваете под «неудачей»? Поскольку приведенный выше код улавливает все исключения, которые могут произойти, и игнорировать их, тем самым эффективно предотвращая откат транзакции в случае возникновения исключения. –

ответ

2

Это не откат, потому что вы ловите исключения. Управление транзакциями Spring работает через исключения, выходящие за границу транзакции, которые обнаруживаются АОП @Transactional.

Если вы поймали исключение sql для ведения журнала или что-то, что вы должны сбросить или выбросить новое исключение, чтобы начать откат.

+0

Спасибо. Это волновало! – Shivayan

1

Добавить @Transactional о методе обслуживания, из которого вы вызываете эти методы DAO. This статья прекрасно суммирует, как это работает.

+0

У меня есть это, но он не работает с собственным SQL-запросом. пожалуйста, найдите мой код выше. – Shivayan

 Смежные вопросы

  • Нет связанных вопросов^_^