間の値をお勧めします。残念ながら、それを行う簡単な方法はありません。しかし...私はHibernateのソースコードをチェックしており、Hibernateは更新/挿入操作を実行する前に複数の条件をチェックしているようです。バッチを使用するかどうかを決定する。 AbstractEntityPersister#updateメソッドを見てください。このような行があるはずです:あなたが行うことができます
final boolean useBatch = j == 0 && expectation.canBeBatched() && isBatchable(); //note: updates to joined tables can't be batched...
ことの一つは、常にfalseを返します独自の実装によってisBatchable()メソッドを置き換えることです。デフォルトでは、次のようになります。
public boolean isBatchable() {
return optimisticLockMode()==Versioning.OPTIMISTIC_LOCK_NONE ||
(!isVersioned() && optimisticLockMode()==Versioning.OPTIMISTIC_LOCK_VERSION) ||
getFactory().getSettings().isJdbcBatchVersionedData();
}
したがって、あなたが次のいずれかの方法を選択できます。
- は、Hibernateのソースコード
- は、設定を微調整置き換えるEntityPersister
- の独自の実装を作成しますプロパティーhibernate.jdbc.batch_versioned_data = falseを設定し、OPTIMISTIC_LOCK_ALLを持つすべてのエンティティのロック・モードを設定します。
私が前に言ったように、単純ではありません。
まあ、hibernate.jdbc.batch_sizeを削除したり、hibernate.jdbc.batch_size = 0に設定しても、バッチ処理が無効になるわけではありません。 –
org.hibernate.cfg.SettingsFactory.createBatcherFactory(Properties、int)にブレークポイントを設定し、どの値が渡され、どのバッチャーファクトリが使用されるかを確認します。 org.hibernate.cfg.SettingsFactory.buildSettings(Properties)で同じことを行います。 Hibernateがバグを持っているか、あなたの設定があなたの考えではありません。 –
@Thilo 'がtrueであることを確認してください。 –
Barett