[Seasar-user:21962] Re: 【DBFlute】MySQLでrewriteBatchedStatements=trueを設定した場合にbatchInsertでEntityDuplicatedExceptionが発生

kubo [E-MAIL ADDRESS DELETED]
2014年 10月 7日 (火) 12:21:28 JST


久保(jflute)です

情報ありがとうございます!

再現しました!
diconの設定は合っていました。

DBFlute-1.0.5L + MySQL-5.6-14 にて、
(rewriteBatchedStatementsを設定した状態で)
MySQLのJDBCドライバーのバージョンによって、
batchInsert()の戻り値のint[]が...

5.1.12 :: {1, 1, 1, ...} => 正常動作
5.1.26 :: {1, 1, 1, ...} => 正常動作
5.1.30 :: {2以上!?, ...} => 現象発生
5.1.33 :: {-2, -2, -2, ...} => 正常動作

というなかなかファンキーな結果となりました。
回避としては、もろもろテストすること前提で、
MySQLのJDBCドライバーを変更すればOKかなというところです。


ちなみに、ぼくの周りでもMySQLを使っているプロジェクトは多いですが、
ReplaceSchema に rewriteBatchedStatements は設定しても、
アプリで設定している現場をまだ見たことがありません。
http://dbflute.seasar.org/ja/manual/reference/dbway/mysql/#fakebatch

理由は単純で、「なんだか怖いから」というところですね。
まあ、テストちゃんとやれば別に大丈夫なんでしょうけど、
冒険せずbatchInsert()のスピードは諦めちゃってる感じですね...


2014-10-07 12:19 GMT+09:00  <2400Lz17 @ mcea.jp>:
> 久保さん
>
> お世話になります。
> 加藤です。
>
> 各バージョンは以下です。
> MySQLサーバ:5.6.21
> mysql-connector-java:5.1.30
> DBFlute:1.0.5G
>
> 設定はデータソースのURLに直接記載しています。
> <property name="url"
> value="jdbc:mysql://localhost:3306/perf_test?useTimezone=true&amp;characterEncoding=utf8&amp;rewriteBatchedStatements=true"/>
>
> 発生したメッセージは以下であっています。
> 「The entity updated two or more records in batch update...」
>
> お手数ですが、よろしくお願いいたします。
>
>> 久保(jflute)です
>>
>> 加藤さん、こんにちは
>> DBFluteご利用ありがとうございます。
>>
>> 発生した例外のメッセージは、
>> 「The entity updated two or more records in batch update...」
>> というもので合っていますでしょうか?
>>
>> ちょっとこちらで再現してみようとしたのですがうまくいかず、
>> jdbc.dicon周りの設定を教えて頂けないでしょうか?
>> 自分は、XADataSourceImplのコンポーネント宣言のところで、
>> 以下の記述を追加したのですが、batchInsert()の結果変わらずで。。。
>>
>> <initMethod name="addProperty">
>>     <arg>"rewriteBatchedStatements"</arg>
>>     <arg>"true"</arg>
>> </initMethod>
>>
>> また、MySQLのバージョンとDBFluteのバージョンを
>> 教えて頂けるとうれしいです。
>>
>>
>> 2014-10-07 11:19 GMT+09:00  <2400Lz17 @ mcea.jp>:
>>> はじめてメールいたします。
>>> 加藤と申します。
>>>
>>> MySQLのJDBCドライバでrewriteBatchedStatements=trueを設定してbatchInsert(マ
>>> ルチプルインサート)を実行したところ、org.seasar.dbflute.s2dao.sqlhandler.Tn
>>> AbstractBatchHandler#handleBatchUpdateResultWithOptimisticLockByResultでorg.
>>> seasar.dbflute.exception.EntityDuplicatedExceptionが発生します。
>>>
>>> マルチプルインサートでは1つのクエリで複数件インサートされるために結果の件数
>>> チェックでエラーになっているのですが、何か回避策をご存知の方がいましたらご教
>>> 示いただきたく、よろしくお願いいたします。
>>>
>>>
>>>
>>> _______________________________________________
>>> Seasar-user mailing list
>>> Seasar-user @ ml.seasar.org
>>> https://ml.seasar.org/mailman/listinfo/seasar-user
>> _______________________________________________
>> Seasar-user mailing list
>> Seasar-user @ ml.seasar.org
>> https://ml.seasar.org/mailman/listinfo/seasar-user
>>
>
>
> _______________________________________________
> Seasar-user mailing list
> Seasar-user @ ml.seasar.org
> https://ml.seasar.org/mailman/listinfo/seasar-user


Seasar-user メーリングリストの案内