2010-11-10 137 views
3

我對緩存級別1有一個誤解。到目前爲止,我已經看到緩存級別1僅用於延遲sql調用,直到事務被刷新。休眠緩存級別1

但是對象呢?例如,我只使用高速緩存級別1.如果我要在1次事務中多次加載相同的對象,會發生什麼情況? hibernate是否使用某種標識映射並緩存在1個事務中加載的對象?

回答

2

到目前爲止,我已經看到了高速緩存級別1只用來放關閉sql調用,直到事務被刷新。

簡而言之,第一級緩存只是從id(主鍵)到保存與該主鍵關聯的狀態的對象的映射。

但是,你不應該混用會話和事務的概念,它們不是一回事(並且會話不一定是事務範圍的)。

如果我要在1次事務中多次加載相同的對象,會發生什麼?

將只有一個表示在數據庫中的給定行(即對於給定的ID的)對象。這就是爲什麼管理狀態成爲可能,這就是一級緩存的重點。

是否冬眠使用某種恆等映射的高速緩存和已加載1個交易

見上文中的對象。

2

您對身份地圖是正確的。 (N)Hibernate使用一個標識映射(http://martinfowler.com/eaaCatalog/identityMap.html)來保留之前已經加載的對象。

但是,此緩存由ISession保留,這意味着您必須共享相同的ISession對象才能利用此緩存。

如果你希望你的緩存,翻過多的ISession共享,你應該看一看(N)Hibernate的緩存2級

3

優勢第一級緩存在二級緩存

1.In首先levlel緩存髒讀問題被刪除。它意味着每個對象值更新時間。

2.它減少了客戶端和數據庫之間的往返次數。

缺點第一級緩存在二級緩存:第一級緩存的

1.對象不是跨會話共享。