Как гарантировать целостность данных в классе действий

У меня есть трехслойное веб-приложение, которое использует эти фреймворки: 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"/>

Вот ссылка для справки.

Другие вопросы по тегам