2011-08-16 6 views
2

설정 트랜잭션을 시도했지만 성공하지 못했습니다. 그것은 그 prcessTransaction 방법처럼 보인다myBatis 및 Spring과의 트랜잭션 설정 방법

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

<bean id="dataSource" class="org.apache.ibatis.datasource.pooled.PooledDataSource"> 
    ....... 
    <property name="defaultAutoCommit" value="false" /> 
</bean> 

<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> 
    <property name="dataSource" ref="dataSource"/> 
</bean> 

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> 
    <property name="configLocation" value="classpath:mybatis-configuration.xml" /> 
    <property name="dataSource" ref="dataSource" /> 
</bean> 

@Transactional 
private void prcessTransaction(...) { 
delete(...); 
//insert: 
for(Item item: itemList){ 
    insert(item) 
} 
} 

<delete id="delete" parameterType="map"> 
    delete from ..... 
    </delete> 

<insert id="insert" parameterType="Item"> 
    insert into .... 
    </insert> 

이 하나의 트랜잭션 그러나 여러 트랜잭션의 세트뿐만 아니라 : 다음은 내 코드입니다. 나는 봄 3.0.5 사용하고

가, 3.0.4을 MyBatis로, MyBatis로 스프링-1.0.1 톰캣 7.0.19, 오라클 도움을 11.1.0.6.0

감사합니다.

+0

'getSqlMapClientTemplate' (스프링 API)를 호출 하시겠습니까? 아니면 iBATIS API를 사용하여 iBATIS 호출을 실행 하시겠습니까? – atrain

+0

iBatis 호출을 사용하고 있습니다. – user802293

+0

데이터베이스가 트랜잭션을 지원합니까? – kurochenko

답변

0

우리는 비슷한 문제가 있지만 더 복잡한 환경에서 각각 자신의 트랜잭션 관리자가있는 2 개의 데이터베이스가 있습니다. 우리가 작동하게하는 유일한 방법은 @Transactional("transactionManager") 주석에 트랜잭션 관리자 인스턴스를 지정하는 것이 었습니다.

주석에 트랜잭션 관리자를 명시 적으로 지정해야하는 이유를 이해할 수 없기 때문에 만족스럽지 않습니다. 개인 방법에 @Transactional 퍼팅

3

이 문제가 보인다, the Spring documentation는 말한다 :

프록시 모드에서 (디폴트) 만 외부 방법은 프록시를 통해 들어오는 것은 차단되어 호출합니다. 즉, 대상 객체의 다른 메소드를 호출하는 대상 객체 내의 메소드 자체 호출은 호출 된 메소드가 @Transactional로 표시되어 있더라도 런타임시 실제 트랜잭션으로 이어지지 않습니다.

같은 부분은 옆이 있습니다

방법 가시성과 @Transactional

프록시를 사용하여, 당신은 단지 공공 가시성 방법에 @Transactional 주석을 적용해야합니다. @Transactional 주석으로 보호 된, 비공개 또는 패키지로 표시되는 메소드에 주석을 추가하면 오류는 발생하지 않지만 주석 된 메소드는 구성된 트랜잭션 설정을 나타내지 않습니다. 비공개 메소드에 주석을 달 필요가있는 경우 AspectJ (아래 참조)의 사용을 고려하십시오.