如何保证动作类中的数据完整性

时间:2014-10-20 08:47:38

标签: java hibernate java-ee struts data-integrity

我有一个使用这些框架的3层Web应用程序: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 个答案:

答案 0 :(得分:1)

您编写了3层Web应用程序,然后我希望您的应用程序具有使用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"/>

以下是link的参考资料。