次のように、挿入するときにバッチステートメントを使用します。
BatchBindStep batch = create.batch(create
.insertInto(PERSON, ID, NAME)
.values((Integer) null, null));
for (Person p : peopleToInsert) {
batch.bind(p.getId(), p.getName());
}
batch.execute();
これは、過去に数千のオブジェクトを挿入するときにうまく機能しました。ただし、いくつかの疑問が生じます。
.bind()
バッチの呼び出し回数に上限はありますか?- もしそうなら、制限は何に依存していますか?
.bind()
を実行した後に再度呼び出すことは可能のよう.execute()
です。.execute()
以前にバインドされた値をクリアしますか?
最後の質問を明確にするために: 次のコードが実行された後...
BatchBindStep batch = create.batch(create
.insertInto(PERSON, ID, NAME)
.values((Integer) null, null));
batch.bind(1, "A");
batch.bind(2, "B");
batch.extecute();
batch.bind(3, "C");
batch.bind(4, "D");
batch.execute();
どの結果を期待する必要がありますか?
a) b)
ID NAME ID NAME
------- -------
1 A 1 A
2 B 2 B
3 C 1 A
4 D 2 B
3 C
4 D
残念ながら、Javadocもドキュメントも、この特定の使用パターンについて説明していません。
(この特定の質問をしている理由.execute()
は、上記の制限を回避するために 1000 回のバインドごとに行う場合、複数の呼び出しでbatch
オブジェクトを再利用できるかどうかを知る必要があるためです。).execute()