2016-09-13 64 views
1

我有對象,我只是想保存使用Hibernate對象的批量處理。下面是我曾嘗試如何使用Hibernate批處理

public void create(List<TransArchive> transArchives) { 
Session session = getCurrentSession(); 
     Transaction tx = null; 
     tx = session.beginTransaction(); 
      for (TransArchive transArchive : transArchives) { 
       session.save(transArchive); 
       } } 

請幫我如何使用批處理代碼列表處理上面的代碼

+0

[Spring Data JPA:嵌套實體的批插入]可能的重複(http://stackoverflow.com/questions/35791383/spring-data-jpa-batch-insert-for-nested-entities) –

回答

0

對於休眠批處理,您必須在您的配置文件中設置Batch_Size屬性。

<property name="hibernate.jdbc.batch_size"> 50 </property> 

後來,如下更新代碼:

public void create(List<TransArchive> transArchives) { 
    Session session = getCurrentSession(); 
    Transaction tx = null; 
    tx = session.beginTransaction(); 
     for (int i=0;i<transArchives.size();i++) { 
      //save the object 
      session.save(transArchives.get(i)); 
      if(i % 50 == 0) // Same as the JDBC batch size 
      { 
      //flush a batch of inserts and release memory: 
      session.flush(); 
      session.clear(); 
      } 
     } 
    tx.commit(); 
    session.close(); 
} 

這是因爲默認情況下,Hibernate會緩存所有的持久化對象的會話級緩存,並最終你的應用程序將下降與OutOfMemoryException