0

挿入、削除、または更新した後、mybatis が commit() するのを止めることができないようです。自分でコントロールしたい

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

(commit)

それを行うためのマッピングをいくつか書きましたが、上記のすべてのinsertListとdeleteの後、mybatisはすぐにコミットします。それをやめるように指示する方法がわかりません.commit()がこれらの関数に組み込まれていることをソースを見て心配しています. db-commit ではなく mybatis-session コミットですが、わかりにくいです)。

ステージングテーブルなどで同様の効果を達成できるかもしれませんが、面倒なようで、正しいメカニズムが存在する場合はそれを使用したいと思います

mybatis 構成 URI で構成できると思っていました。

たぶん、これを行う方法を知るのに十分なほどmybatisを理解していないだけです

4

2 に答える 2

0

@boday hm、「コメント」のオプションを失ったようです。

はい、しかしこれが問題です。挿入するバッチが非常に大きいため、10,000のグループに分割する必要があります。そうしないと、不幸にもmybatisが壊れてしまいます。また、前にテーブル削除を行います。彼らがコミットせずに特別なことのためにある種の「バックドア」を残してくれたらいいのにと思います。

悲しいことに、探しているアトミック効果を得るために、ステージングテーブルを使用し、何らかの「名前の変更」を行う必要があるかもしれないと感じています。

他の人が言及した「openSession」を取得する方法を見ていきます。また、commit()メソッドをオーバーライドして基本的に何もしない独自のカスタム'SqlSession'を使用して完全に冷蔵庫に入れることもできます。これは、1つのメソッドしかないため、それほどひどいことではありませんが、明らかに非常に重要です。理想的ではありません。

于 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 に答える