session.flush()與session.clear()的區別及使用環境

來源:互聯網
上載者:User

首先session是有一級緩衝的,目的是為了減少查詢資料庫的時間,提高效率,一級緩衝的生命週期和session是一樣的,

session.flush()和session.clear()就針對session的一級緩衝的處理。

   簡單的說,

1 session.flush()的作用就是將session的緩衝中的資料與資料庫同步。

2 session.clear()的作用就是清除session中的快取資料(不管緩衝與資料庫的同步)。

   詳細的說:網上很多這樣的文章,我就不說了,可以看看這篇文章,寫的很詳細。http://blog.csdn.net/lssssss/article/details/6839633

我說一下一些需要注意的資訊:

1 session.clear()的作用是只清除session中的快取資料,但不管緩衝與資料庫的同步。

比如,你執行了

Po po = new Po();

session.save(po),

之後馬上執行session.clear(),在事務結束的時候,這條資料是不會被持久化到資料庫中的,因為一般緩衝是在事務提交的時候進行清理的,當在清理緩衝前就把緩衝給清除了,自然就不會同步到資料庫了。不過這個也有例外的情況,就是當對象使用native產生器來產生主鍵id時,當執行session.save()方法時,就會立馬往資料庫插入一條資料,這時候執行session.clear()也不會影響了。

2 當更新或者儲存大批量資料的時候,可以每固定數量的時候,進行清理緩衝,同時清除緩衝:

for (int i = 0; i < 1000;i ++){

if (i /20 == 0) {

  session.flush();

  session.clear();

}

}

因為把大量的對象放到session緩衝中會浪費大量的內容空間。

3 執行完session.flush()時,並不意味著資料就肯定持久化到資料庫中的,因為事務控制著資料庫,如果事務提交失敗了,緩衝中的資料還是照樣會被復原的。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.