2012-01-19 7 views
1

私は <小道具キー= "hibernate.jdbc.batch_size" を持っている> 30 < /小道具>hibernate.jdbc.batch_sizeが動作していることを確認するにはどうすればよいですか?私の休止状態のプロパティで

私のコードで

私は

final StatelessSession sSession = sessionFactory.openStatelessSession(); 
try { 
    sSession.connection().setAutoCommit(false); 
} catch (final SQLException se) { 
    // log a message 
} 
final Transaction tx = sSession.beginTransaction(); 
try{ 
    for (some loop) { 
     Customer customer = new Customer(.....); 
     sSession.insert(customer); 
     /* Do we need to flush a stateless session? It doesn't have methods for it 
     if (i % 30 == 0) { //30, same as the JDBC batch size 
      //flush a batch of inserts and release memory: 
      sSession.flush(); 
      sSession.clear(); 
     } 
     */ 
    } 
    //sSession.flush();// Do we need to flush a stateless session? It doesn't have methods for it 
    //sSession.clear(); 
} finally{ 
    tx.commit(); 
    sSession.close(); 
} 

マイPOJOに似た何かをするには、以下があります

ただし、バッチサイズを変更すると、全体の実行時間に影響しないようです。実際に動作していることをどのように確認できますか?

ありがとうございます!

答えて

1

コメントアウトsession.flush();と20ループinterations

アップデート後に何が挿入されているかどうかを確認:更新された質問

から//@GeneratedValue(strategy = GenerationType.AUTO)のコメントは、私の知る限りアイデンティティ

を使用してみてくださいであるバックデフォルトにフォール必要があります
@TableGenerator(name="TABLE_GEN", table="SEQUENCE_TABLE", pkColumnName="SEQ_NAME", valueColumnName="SEQ_COUNT", pkColumnValue="EMP_SEQ") 
@GeneratedValue(strategy=GenerationType.TABLE, generator="TABLE_GEN") 
+0

はい、私はまだ30だけでなくすべての行を持っています。 – user973479

+0

ok then batching doesnt work。一般的なシナリオは、 "identity"または "native" idジェネレータを使用し、idを取得するためにHibernateがsave()でimmediatlyに移動する必要がある場合です。 – Firo

+0

正解、身分証明セットがありません。メインポストの更新されたコードを参照してください。 – user973479

関連する問題