2016-04-25 96 views
1

我是新手Hibernate框架,我很好奇的方式堅持和更新的工作。堅持/更新數據採集到數據庫使用休眠

當前在我的項目中,當我想要將數據集合保存或更新到數據庫時,我正在通過循環方法逐個執行。例如,

public persistData(){ 
     List<Person> personList = new ArrayList<>(); 
     for(Person person : personList){ 
      session.persist(person); 
     } 
    } 

是否有可能,例如,

session.persist(personList); 

或者有其他反正我能堅持的數據/更新集合在一次不循環?

Editted: 我已經找到Hibernate的批處理中 How to insert multiple rows into database using hibernate?Best way to insert a good amount of records in hibernate

我開發的通用類持續/更新/與Hibernate刪除數據,我應該提供與方法

public void (List<T> addedItemList) 

public void (T addedItem) 

對於m在理解的時候,大量的交易應該做大量的交易嗎?如果有些時候只有1或2個對象需要保存,批處理是否合適?

+1

您可能從閱讀文檔http://hibernate.org/orm/(選擇您使用的版本)開始。 –

+1

AFAIK沒有批量更新方法。將你的'for'循環包裝在一個事務中,並在方法結束時提交它將很有效率。如果你有大量的行使用[批量插入](https://docs.jboss.org/hibernate/orm/3.3/reference/en/html/batch.html#batch-inserts) – Bunti

回答

0

這裏的要點是開始交易,堅持一切,然後提交。請不要使用@Transaction,因爲您正在使用代碼。

   EntityManager em = entityManagerProvider.get(); 
//    em.clear();//remove this if caching is necessary 
       em.getTransaction().begin(); 
       for(buildings b:buildingsArray) { 
        em.persist(b); 
       } 
       em.getTransaction().commit();