バッチ処理のためにHibernateを設定しようとしています。私はサンプルアプリケーションを構築し、Hibernateの文書に従って設定しました。Hibernateバッチ処理
しかし、それはすべてが、単に個々のインサートでバッチ挿入を行っていないようにSQLをログアウトするにHibernateを構成した後、それが見えます。このログを間違って読んでいますか?
だから、私は春ブーツアプリで構成され、以下の特性を持っています。ここで
spring.jpa.properties.hibernate.jdbc.batch_size=10
spring.jpa.properties.hibernate.show_sql=true
spring.jpa.properties.hibernate.format_sql=true
は私の非常に基本的なバッチライター..です
@Transactional public class BatchWriter {
private EntityManager entityManager;
private int batchSize;
public BatchWriter(EntityManager entityManager, int batchSize) {
this.entityManager = entityManager;
this.batchSize = batchSize;
}
public void writeBatchOfCustomers(int numOf) {
for(long i = 0; i <= numOf; i++) {
Customer customer = new Customer(i);
entityManager.persist(customer);
if (i % batchSize == 0) { //20, same as the JDBC batch size
//flush a batch of inserts and release memory:
entityManager.flush();
entityManager.clear();
}
}
}
}
今、私は、例えば、20人のお客様を挿入するために、これを実行していると、休止状態のログに、私は、次の20回見ています:
をHibernate:
insert
into
customer
(first_name, last_name, id)
values
(?, ?, ?)
私はここで何をしないのですか?
現在はH2データベースと春のブート自動構成を使用しています。しかし、私は最終的にSpring BatchとOracle dbで使用することを検討しています。これは約35個の属性を持つ約30k個のオブジェクトを挿入します。
助けてください。
おかげで、
なぜJPAを設定しているときにSessioNFactoryを使用していますか? 'SessionFactory'ではなく、' EntityManager'を使うべきです。 –
そのコードは、hibernateのドキュメントから十分に近いところにコピーされているので、それはただ捨ててしまいます。私は影響を見ませんでしたか? – buymypies
もう一度JPAを設定していますが、単純な 'SessionFactory'を使用しています。あなたはXを設定していますが、Yを使用しています。Xを設定するとYに影響するのはなぜですか?記述されているように、 'EntityManager'を使用して(ライターに注入して)' @ Transactional'でアノテーションを付けます。持っているHibernateの設定をすべて削除して、Spring BootでJPAを設定してください。 –