2017-02-01 69 views
0

我聽說session.close(),之後,這個會話中的對象將被從緩存中刪除。after session1.close(),session2從緩存中獲取對象進入休眠狀態

如果'是' 那麼爲什麼'session2'對象從緩存中檢索對象?

我將結束「會話1」當我取數據第一次(查詢執行)和數據將被存儲在緩存中(默認一級高速緩存),沒錯! 但是,在創建'session2'對象後,我仍然能夠檢索特定的對象(無查詢正在執行),意味着它正在從緩存中取得對象! .... 爲什麼?

在形象,我有我的粘貼代碼 Image : my java files, table, persistent class, output

+0

你是如何的結論,這是同一個對象,你在獲取前一交易日???? – Zulfi

+0

因爲沒有查詢我的第二次會議的對象執行(對象o = session2.load(Pojo_class.class,1))...這就是爲什麼我認爲這是從我從第一屆的對象(標準檢索同一對象檢索C = session1.createCriteria(Pojo_class.class); c.add(Restrictions.eq(「ID」,1);我錯了有關會議2相同的對象 –

+0

檢查,如果您檢索對象的引用是相同或不?它不會是相同的按規格。也可以大家分享您所創建Hibernate配置。是第二級緩存,或者查詢緩存啓用或不??? – Zulfi

回答

0

有在Hibernate的緩存leves,你需要了解。

一級緩存:

一級緩存是Session的緩存,是一個強制性的緩存 通過其所有的請求都必須通過。在將對象提交給數據庫之前,會話對象保持其自身的權力。

二級緩存:

二級緩存是一個可選的高速緩存和一級緩存就會作出任何嘗試之前在 二級緩存,定位對象 隨時查閱。第二級緩存可以在 每個類和每個採集的基礎上配置和主要負責緩存在會話 對象。

查詢級緩存:

Hibernate也實現了查詢結果集緩存與二級緩存緊密結合 。

所有從這裏引用Cache Hibernate Tutorial。總之,該會話的第一級緩存被刪除。但這並不意味着其他會話緩存或二級緩存需要被刪除,因爲有他自己的緩存。希望它對你有所幫助。