2011-11-07 1 views
0

웹 응용 프로그램의 데이터베이스 프레임 워크로 iBatis를 사용하는 데 문제가 있습니다. 두 개의 삽입 후에 수동으로 트랜잭션을 커밋하고 싶지만 iBatis는 모든 삽입 후에 커밋합니다. 어떻게 방지 할 수 있습니까? 나는 또한 iBATIS를/MyBatis로 학습하고 점차적으로 나의 그립을 얻고있다iBatis 커밋 삽입, 업데이트 및 삭제를 중지하는 방법?

<sqlMapConfig> 

<settings enhancementEnabled="true" 
    errorTracingEnabled="true" 
    useStatementNamespaces="false" /> 

<transactionManager type="JDBC" commitRequired="false" > 
    <dataSource type="JNDI"> 
     <property name="DataSource" 
      value="java:/comp/env/jdbc/MY_DB" /> 
    </dataSource> 
</transactionManager> 

<sqlMap resource="com/my/common/Common.xml" /> 

</sqlMapConfig> 

답변

2

:

여기 내 SqlMapConfig.xml 파일 내용입니다. 일부 설정에서 불확실한 sqlMapConfig의 모든 다른 속성에 대해 말할 수는 없지만 단일 트랜잭션에 여러 개의 insert가 포함되기를 원하십니까? 일괄 업데이트와 마찬가지로 일괄 처리로 일괄 처리를 래핑합니다. 이 예는

try { 
     sqlMap.startTransaction(); 
     sqlMap.startBatch(); 
     for (final ObjectXXXDTO objectReference1 : GenericObjectList) { 
      sqlMap.insert("createExample1", objectReference1); 
     } 
     sqlMap.insert("createExample2", otherReference2); 
     sqlMap.insert("createExample3", otherReference3); 
     sqlMap.executeBatch(); 
     sqlMap.commitTransaction(); 
    } catch (final SQLException e) { 
     throw new XXXException(e); 
    } finally { 
     try { 
      sqlMap.endTransaction(); 
     } catch (SQLException e) { 
      throw new XXXException(e); 
     } 
    } 

iBatis를 2.3.4

을 기반으로하지만 당신은 키 생성 된 데이터베이스가 생성되지 않습니다 문장의 일괄 세트를 사용 할 때마다 당신이 executeBatch() 방법이라고까지 있습니다. 즉, selectKey을 사용하여 생성 된 키로 개체를 업데이트하면 null이 반환됩니다. 다른 삽입물의 일부로 새롭게 생성 된 키를 필요로하는 객체가있는 경우 startBatch() 앞에 삽입 또는 업데이트 할 수 있습니다.

다시 말하지만이 접근 방식이 맞는지는 확실하지 않지만 어쨌든 게시하는 것으로 생각됩니다. 감사합니다

+1

이 아이디어는 훌륭하고 효과적이지만, 필요한 것은 아닙니다. 어쨌든 고마워. – radonys

1

요소의 "commitRequired"속성이 필요한 것입니다. 또한

myBatis guide

The <transactionManager> element also allows an optional attribute commitRequired that can be true or 
false. Normally iBATIS will not commit transactions unless an insert, update, or delete operation has been 
performed. This is true even if you explicitly call the commitTransaction() method. This behavior 
creates problems in some cases. 

, 나는 행동에 iBatis를 읽기 위하여 당신을 추천 할 것입니다.