批量修改或批量刪除 session.clear()和session.flush()

在javaEey罈子上有人提到“robbin提到Hibernate3的缺點,一級緩存的強引用的問題,所以在做批量查詢和插入操作的時候需要執行session.flush和session.clear兩個操作。”

 

如批量插入時可以這麼做:

先在循環裏面調用session.save()來保存,然後當到達指定的批處理數目的時候(比如20個),執行 session.flush()和session.clear()來將數據寫入數據庫並清空Hibernate緩存。 
   

public List<SomeObject> saveFiberCodes(final List<SomeObject> codes) {
       
return (List<SomeObject>) this.getHibernateTemplate().execute(new HibernateCallback() {
            @Override
           
public Object doInHibernate(Session session) throws HibernateException, SQLException {
               
for (int i = 0; i < codes.size(); i++) {
                    session.save(codes.get(i));
                   
if (i % 20 == 0) {
                        session.flush();
                        session.clear();
                    }
                }
               
               
return  codes;
            }
        });
    }

 

罈子上又有人說“主要是一級緩存過大會拋異常,所以要分批處理,但是如果遇到那種所有數據必須一起回滾的問題就不能這麼用了,還是老老實實的用jdbc吧,所以說實話,如果你的項目主要是涉及批量處理的話還是不要用hibernate了 ”,我認爲只要是在事物範圍內是不會有問題的,因爲事物開啓後autoCommit = false ,雖然session.flush();也不會同步DB的。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章