Мне нужно управлять двумя методами Дао в одной транзакции, отказ одного из них должен откат другого. Вызывающий метод находится в сервисном слое. Технология, используемая в родном 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;
}
Подобно этому методу есть другой метод, который удаляет данные из другой таблицы.
Да. Сделайте свой метод обслуживания транзакционным. Это типичный способ сделать. Почему уже не ваш транзакционный уровень сервиса? Где ваш код? –
Мой сервисный уровень уже транзакционен, но проблема, которую я обнаружил, заключается в том, что откат не выполняется и что я считаю, что причиной является @Transactional, поддерживает сущность, а не вставка строки. Я разместил коды. – Shivayan
Что вы подразумеваете под «неудачей»? Поскольку приведенный выше код улавливает все исключения, которые могут произойти, и игнорировать их, тем самым эффективно предотвращая откат транзакции в случае возникновения исключения. –