2012-03-21 66 views
0

我有一個簡單的示例實體A,它具有一個id和一個版本字段。 Id生成策略設置爲TABLE。屬性hibernate.jdbc.batch_sizehibernate.jdbc.batch_versioned_data設置爲20trueHibernate批處理意外行爲

我試圖做實體A的批量插入下列要求:

for (int i = 0; i < 500; i++) { 
      A a = new A(); 
      a.persist(); 
      if (i % 20 == 0) { 
       em.flush(); 
       em.clear(); 
      } 
     } 

MySQL的記錄來看,這將導致500個獨立insert into a (version, id) values (0, X)報表,而我期待像insert into a (version, id) values (0, 1), (0, 2),...(0, 20)重複25次。

設置hibernate.jdbc日誌級別調試顯示:

org.hibernate.jdbc.AbstractBatcher - Executing batch size: 20
org.hibernate.jdbc.AbstractBatcher - no batched statements to execute

使用Hibernate 3.6.8,MySQL的5.5。

我在這裏錯過了什麼?

回答

0

回答我自己的問題 - 似乎hibernate不會將單個插入語句分組爲插入多行的單個插入語句。如果啓用了休眠批處理,MySQL將執行此操作,如果rewriteBatchedStatements JDBC驅動程序設置設置爲true