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李剛