Search code examples
javahibernatejakarta-eestrutsdata-integrity

how to guarantee data integrity in action class


I have a 3 layer web application which uses these frameworks: struts, spring and hibernate. in action class I have called a method in business logic layer which update data in a specific table. now I have to call another class to insert data in another table, these are different tables so have different classes in business logic layer and DAO layer. I want to have data integrity means if the second insert failed, I have to rollback the first one. how could I control it in action class.

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();
            }

I can not roll back the updated policy.


Solution

  • You wrote 3 layer web application then I expect you application has service layer that implements with spring.So you should control your transaction into service layer using @Transational annotation inject in your service class.See sample service class

    @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);
         }
    }
    

    This declarative transaction will rollback when one of the services method has failed.Don't forget to declare your spring-bean.xml or yourConfig.xml into

    <tx:annotation-driven transaction-manager="txManager"/>
    

    Here is the link for some reference.