2014-09-04 1 views
0

Annotation driven 선언적 메서드를 사용하여 MyIbatis와 Spring 트랜잭션을 함께 사용하면 세션 관리가 번거 롭습니다. 나는 보통 이런 식으로 할 트랜잭션없이MyIbatis-Spring 트랜잭션 closeSession

는 :

public int insertPnt(Movimenti value) { 
    try (SqlSession session = sqlSessionFactory.openSession()) { 
    for (Movimenti value : values) { 
     session.insert(
        "com.sirio.cisl.dal.MovimentiMapper.insertSelective", 
        value); 
     } 
    } catch (Exception e) { 
     log.error("Error inserting movimenti "+user+" anno "+anno+" "+ e.getMessage()); 
     throw e; 
    } 
} 

하지만 MyIbatis - 봄 문서에서

나는

MyBatis로 SQLSESSION 프로그래밍 트랜잭션을 처리 할 구체적인 방법을 제공 읽어 보시기 바랍니다. ........... . 즉, Spring은 항상 트랜잭션을 처리합니다. Spring 관리 SqlSession을 통해 SqlSession.commit(), SqlSession.rollback() 또는 SqlSession.close()를 호출 할 수 없습니다.

그래서 난 그냥 방법에 @Transaction 주석 (그리고 <tx:annotation-driven> 설정)을 추가 할 때 나는 올바른 일을 해요 경우 방황.

@Transactional(rollbackFor=Exception.class) 
public int insertPnt(Movimenti value) { 
    try (SqlSession session = sqlSessionFactory.openSession()) { 

    .............. 

} 

세션 관리자가 세션 정보를 처리합니까? 또는 try-catch 절을 제거해야합니다. THK

답변

0

는 나는 동일한 질문 MyIbatis 사용자 그룹 see을 게시 할 수 있습니다. 응답은 유용했습니다 :

MyBatis를 사용하려면 SqlSesion 또는 Mapper 인터페이스가 필요합니다. "classic"MyBatis를 사용하면 SqlSessionFactory에서 세션을 가져 오지만 Spring을 사용할 때이 변경 사항이 적용됩니다.

그래서 나는 documentation의 예를 따르 나는 내부적으로 오프닝을 담당하고 세션을 닫을 sqlSessionTemplate으로 서비스 클래스를 주입.

@Transactional(rollbackFor=Exception.class) 
public int insertPnt(Movimenti value) { 
     session.create(......) 
} 

다비드

:

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean" > 
    <property name="dataSource" ref="dataSource" /> 
    <property name="configLocation" value="classpath:myibatis.xml"/> 
    <property name="mapperLocations" value="classpath*:mappers/*.xml" /> 
</bean> 


<bean id="asTableService" class="com.sirio.cisl.dal.AsTableService"> 
    <property name="session" ref="sqlSession" /> 
</bean> 

<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate" destroy-method="clearCache"> 
    <constructor-arg index="0" ref="sqlSessionFactory" /> 
    <constructor-arg index="1" value="BATCH" /> 
</bean> 

는 다음 나는 @Transactional 주석을 사용할 수 있습니다