0

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

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

(commit)

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

我也许可以使用临时表和东西来达到类似的效果,但它看起来很乱,如果存在,我更愿意使用正确的机制

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

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

4

2 回答 2

0

@boday 嗯,看来我失去了“评论”的选择。

是的,但这就是问题所在,我有这么大的批次要插入,我需要将它分成 10,000 个组,否则 mybatis 会不幸中断。我之前也做了一个表删除。我希望他们在没有承诺的情况下为特殊事物留下某种“后门”。

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

我将看看其他人提到的“openSession”。我也想到我可以用我自己的自定义“SqlSession”完全操纵它,它覆盖了 commit() 方法,基本上什么都不做,它不会那么糟糕,因为它只是一种方法,但显然非常不理想。

于 2013-03-04T10:16:44.063 回答
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

于 2013-03-03T06:03:02.827 回答