Как гарантировать целостность данных в классе действий
У меня есть трехслойное веб-приложение, которое использует эти фреймворки: Struts, Spring и Hibernate. в классе действий я вызвал метод на уровне бизнес-логики, который обновляет данные в определенной таблице. теперь мне нужно вызвать другой класс для вставки данных в другую таблицу, это разные таблицы, поэтому у них разные классы на уровне бизнес-логики и уровне DAO. Я хочу иметь целостность данных, значит, если вторая вставка не удалась, я должен откатить первую. Как я мог контролировать это в классе действий.
try{
policyIssuanceManagement.updatePolicy(currentPolicy);
String result=policyDetailManagement.insertDataInPolicyDetail(policyId, riskAmount, riskPercent, riskId, regionRisk, regionPercent, regionId, stepped, steppedPercent, steppedId, discount, discountPercent, discountId);
}
catch (Exception e) {
e.printStackTrace();
}
Не могу откатить обновленную политику.
1 ответ
Вы написали трехслойное веб-приложение, и я ожидаю, что у вашего приложения есть сервисный уровень, который реализуется с помощью Spring. Поэтому вы должны контролировать свою транзакцию на сервисном уровне, используя @Transational
добавление аннотации в ваш класс обслуживания.
@Service
@Transational
public class PolicyManagement {
@Transaction
public void fooManagemantService() {
policyIssuanceManagement.updatePolicy(currentPolicy);
policyDetailManagement.insertDataInPolicyDetail(policyId, riskAmount, riskPercent, riskId, regionRisk, regionPercent, regionId, stepped, steppedPercent, steppedId, discount, discountPercent, discountId);
}
}
это declarative transaction
произойдет откат при сбое одного из сервисов. Не забудьте объявить ваш spring-bean.xml или yourConfig.xml в
<tx:annotation-driven transaction-manager="txManager"/>
Вот ссылка для справки.