Hibernate的批量處理-批量更新 – JAVA編程語言程序開發技術文章

private void updateUsers()throws Exception 

    //打開Session 
    Session session = HibernateUtil.currentSession(); 
    //開始事務 
    Transaction tx = session.beginTransaction(); 
    //查詢出User表中的所有記錄 
    ScrollableResults users = session.createQuery("from User") 
        .setCacheMode(CacheMode.IGNORE) 
        .scroll(ScrollMode.FORWARD_ONLY); 
    int count=0; 
    //遍歷User表中的全部記錄 
    while ( users.next() ) 
    { 
        User u = (User) users.get(0); 
        u.setName("新用戶名" + count); 
        //當count為20的倍數時, 
        //將更新的結果從Session中flush到數據庫。 
        if ( ++count % 20 == 0 )  
        { 
            session.flush(); 
            session.clear(); 
        } 
    } 
    tx.commit(); 
    HibernateUtil.closeSession(); 

通過這種方式,雖然可以執行批量更新,但效果非常不好。執行效率不高,需要先執行數據查詢,然後再執行數據更新,而且這種更新將是逐行更新,即每更新一行記錄,都需要執行一條update語句,性能也非常低下。
為瞭避免這種情況,Hibernate提供瞭一種類似於DML語句的批量更新、批量刪除的HQL語法。
作者:fkJava李剛

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *