每次插入后,Apache Camel mybatis都会提交,希望不要这样做

时间:2013-03-03 00:14:04

标签: apache-camel mybatis

我似乎无法在插入,删除或更新之后阻止mybatis进行commit()。我想自己控制

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

(commit)

并写了一些映射来做到这一点,但是在上面的每个insertList和delete之后,mybatis会立即提交。我不确定如何告诉它停止这样做,并且我很担心通过源代码看看,在mybatis中不可避免地将commit()内置到这些函数中DefaultSqlSession例如似乎有硬连线(尽管它可能是一个mybatis会话提交而不是db-commit,但很难说。)

我可能能够通过临时表和事物获得类似的效果,但它看起来很混乱,如果存在,我更愿意使用正确的机制

我希望它可以在mybatis配置URI上配置。

也许我只是不了解mybatis,知道如何做到这一点

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

@boday hm,似乎我已经失去了'评论'的选项。

是的,但这是问题所在,我有一个很大的批量插入,我需要将它分成10,000组或mybatis休息组。我之前也做过表删除。我希望他们在没有承诺的情况下为特殊事物留下某种“后门”。

我有一种感觉,我可能需要使用临时表并进行某种“重命名”以获得我正在寻找的原子效果。

我要看看另一个人提到的'openSession'。它也发生在我身上我可以完全用我自己的自定义'SqlSession'来覆盖它,它覆盖了commit()方法,基本上什么都不做,而且它不会那么可怕,因为它只是一种方法,但显然非常非理想。