2012-05-08 11 views
2

今はentitymanagerを使用して、このようなコードを使用してDAOでデータベースにオブジェクトエンティティのリストを挿入しています。Hibernate EntityManager persist()とデータベース往復回数

@Transaction 
public void insertBatch(List<EntityObject> o){ 
    for(int i=0;i<o.size();i++){ 
     em.persist(o); 
     if(o.size % 100 == 0){ //equal to JDBC batch size 
       em.flush(); 
       em.clear(); 
     } 
    } 
} 

そして、私は私の質問があり、この

Hibernate: insert into TABLE (FIELD1, FIELD2) values (?, ?) 
Hibernate: insert into TABLE (FIELD1, FIELD2) values (?, ?) 
... 
... 
...//untill reach 100 lines. 
Hibernate: insert into TABLE (FIELD1, FIELD2) values (?, ?) 

のようになります。アプリケーション・コンテキスト

<property name="jpaVendorAdapter"> 
     <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"> 
          <property name="showSql" value="true"/> 
     </bean> 
    </property> 

にこれを追加することによって、SQL文とコンソールに結果を監視する場合。 私はこのメソッドを呼び出すたびに100回のデータベースとの往復を行うか、それとも1回だけの往復ですか?

いずれの回答や洞察もありがたいです。

ありがとうございました。

+0

flush()の呼び出しの前にログステートメントを追加するだけで、あなた自身が見ることができます。 –

答えて

1

あなたが休止状態JPAでバッチ処理が必要な場合は、JPA仕様を1として

<property name="hibernate.jdbc.batch_size" value="100" /> 

を設定してみてください:

Xがでたりする前に トランザクションがコミットまたはとしてデータベースに入力されます管理エンティティフラッシュ操作の結果

ので、フラッシュがデータベース・ラウンドトリップです。あなたは休止状態-JPAを春(トランザクション)を使用している場合

ところで、その後、春はあなたのためにトランザクションを管理します。

関連する問題