2013-03-03 2 views
0

삽입, 삭제 또는 업데이트 한 후에 커밋()에서 mybatis를 중지 할 수 없습니다. 나는이 자신Apache Camel mybatis가 삽입 될 때마다 커밋됩니다.

from(A) 
(begin) 
... do some processing ... 
lots of 
.to("mybtis:insertX?statementType=insertList") 

(commit) 

그 작업을 수행하는 일부 매핑을 작성했습니다,하지만 모든 insertList 위 후를 제어하고 삭제하려면, 즉시 커밋 MyBatis로. 나는 그 일을 멈추라는 것을 확신 할 수 없다. mybatis에서 commits()가 필연적으로 mybatis DefaultsqlSession에 내장 된 소스를 살펴볼까 걱정된다. 예를 들어, DefaultSqlSession은 commit()이 하드 와이어 된 것으로 보인다. db 커밋보다는 mybatis-session 커밋이지만, 알기는 어렵다).

내가 스테이징 테이블과 사물과 유사한 효과를 달성 할 수있을 수도 있지만이 지저분한 것 같다 내가 한 내가 MyBatis로 구성에 구성 할 수 그것을 기대

을 존재하는 경우 올바른 메커니즘을 사용하는 것을 선호 것 URI.

어쩌면 난 그냥 MyBatis로 충분히 수행하는 방법을 알고 이해 해달라고이

+0

'Connection'의'autoCommit'이 true로 설정되어 있습니다. 연결 구성 방법을 설명하고 연결 풀을 사용하고 있습니까? – partlov

답변

0

당신이 .to("mybtis:insertX?statementType=insertList") 호출 할 때마다 자동으로 커밋 것 올바른지,하지만 당신은 한 번에 모든 커밋하려는 목록에 전달할 수 있습니다. ..

from(A) 
(begin) 
... do some processing ... 
... aggregate into a List ... 
.to("mybtis:insertX?statementType=insertList") //commits once after entire List is inserted 

https://svn.apache.org/repos/asf/camel/trunk/components/camel-mybatis/src/test/java/org/apache/camel/component/mybatis/MyBatisInsertListTest.java

0

@boday 흠, 내가 '코멘트'로 옵션을 잃은 것 같다 참조하십시오.

예,하지만 문제가 있습니다. 삽입 할 큰 배치가있어서 10,000이나 mybatis 그룹으로 나누어야한다는 것이 유감입니다. 나는 또한 전에 테이블 삭제를한다. 나는 그들이 커밋없이 특별한 일을하기 위해 어떤 종류의 '백도어'를 남겼 으면 좋겠다.

나는 준비 테이블을 사용하고 슬픈 듯이 찾고있는 원자 효과를 얻기 위해 일종의 '이름 바꾸기'를해야한다고 생각합니다.

다른 사람이 언급 한 'openSession'을 살펴 보겠습니다. 그것은 또한 기본적으로 아무 일도하지 않는 commit() 메서드를 오버라이드하는 내 자신의 사용자 지정 'SqlSession'을 사용하여 완전히 처리 할 수 ​​있으며 한 가지 방법 일 뿐이므로 너무 심하지 않을 것입니다.하지만 분명히 매우 그렇습니다. 비 이상적.