2014-10-20 70 views
0

我有一個使用這些框架的3層web應用程序:struts,spring和hibernate。 in action class我已經在業務邏輯層調用了一個方法來更新特定表中的數據。現在我必須調用另一個類來在另一個表中插入數據,這些表是不同的表,因此在業務邏輯層和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

你寫了3層的Web應用程序,然後我希望你的應用程序有與spring.So實現你應該使用@Transational標註在服務class.See樣本服務類注入控制你的交易到服務層服務層

@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將回滾時,服務方法之一具有failed.Don't忘記您的彈簧bean.xml或yourConfig.xml宣佈進入

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

這裏是link供一些參考。