2013-11-25 106 views
0

我在回滾事務中遇到問題。下面我寫了一些bean的配置。我做了2個SQL查詢:刪除和更新。當UPDATE生成異常(外部約束)時,第一個查詢(DELETE)不會回滾。任何人都可以告訴我問題在哪裏?爲了清楚起見,我只寫了一些配置,所以如果需要更多信息,請告訴我。非常感謝!事務不會在休眠中回滾

背景:

我有方法removeUser DAO層:

public void removeUser(final Long id) { 
     getHibernateTemplate().execute(new HibernateCallback() { 
      @Override 
      public Object doInHibernate(Session session) throws HibernateException, SQLException { 
       executeUpdate("delete from table1 where user_id = ?", session, id); 
       executeUpdate("update table2 set user_id = null where user_id = ?", session, id); 
       return null; 
      } 

      private void executeUpdate(String queryString, Session session, Long... params) { 
       SQLQuery query = session.createSQLQuery(queryString); 

       for (int paramIndex = 0; paramIndex < params.length; paramIndex++) { 
        Long param = params[paramIndex]; 
        query.setParameter(paramIndex, param); 
       } 

       query.executeUpdate(); 
      } 
     }); 
} 

此方法從服務中調用:

public void removeUser(Long id) { 
     userDao.removeUser(id); 
} 

此服務經由彈簧構成:

<bean name="adminUserService" parent="txProxyServiceTemplate"> 
    ... setting properties ...  
</bean> 

<bean id="txProxyServiceTemplate" abstract="true" 
      class="com.xalmiento.desknet.ui.server.service.transaction.GWTTransactionProxyFactoryBean"> 
     <property name="transactionManager" ref="transactionManager"/> 
     <property name="transactionAttributes"> 
      <props> 
       <prop key="remove*">PROPAGATION_NESTED</prop> 
      </props> 
     </property> 
</bean> 

<bean id="transactionManager" 
      class="org.springframework.orm.hibernate3.HibernateTransactionManager"> 
     <property name="sessionFactory" ref="sessionFactory"/> 
     <property name="nestedTransactionAllowed" value="true"/> 
</bean> 
+1

您正在使用哪個數據庫,並且'PROPAGATION_NESTED'只適用於某些數據庫,您是否嘗試了'PROPAGATION_REQUIRED'。 –

+0

我們使用的是mysql 5.5.31,我們也使用org.hibernate.dialect.MySQL5InnoDBDialect – Dedyshka

+0

確保你的表確實是InnoDB表而不是MyISAM表! –

回答

0

<prop key="remove*">PROPAGATION_REQUIRED</prop> 

嘗試,我不認爲所有的數據庫服務器不支持該交易。

+0

不..沒有幫助.. – Dedyshka