2013-11-25 6 views
0

롤백 트랜잭션에 문제가 있습니다. 아래에서는 콩의 구성 중 일부를 작성했습니다. 나는 2 개의 SQL 쿼리를 수행한다 : 삭제와 업데이트. 그리고 UPDATE가 예외 (외국 ket 제약)를 생성하면 첫 번째 쿼리 (DELETE)는 롤백되지 않습니다. 아무도 문제가있는 곳을 말해 줄 수 있습니까? 나는 명확성을 위해서 구성의 일부만을 썼다. 더 많은 정보가 필요하다면 알려주기 바란다. adnvance에 감사드립니다!최대 절전 모드에서 트랜잭션이 롤백되지 않습니다.

CONTEXT :

I이 방법 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

테이블이 MyISAM 테이블이 아니라 실제로 InnoDB 테이블인지 확인한다! –

답변

0

함께 시도하십시오

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

나는 모든 데이터베이스 서버가 트랜잭션을 지원하지 않는다고 생각합니다.

+0

No..it 도움이되지 않았습니다 .. – Dedyshka

관련 문제