我有一个使用这些框架的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();
}
我无法回滚更新的政策。
答案 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的参考资料。