我對緩存級別1有一個誤解。到目前爲止,我已經看到緩存級別1僅用於延遲sql調用,直到事務被刷新。休眠緩存級別1
但是對象呢?例如,我只使用高速緩存級別1.如果我要在1次事務中多次加載相同的對象,會發生什麼情況? hibernate是否使用某種標識映射並緩存在1個事務中加載的對象?
我對緩存級別1有一個誤解。到目前爲止,我已經看到緩存級別1僅用於延遲sql調用,直到事務被刷新。休眠緩存級別1
但是對象呢?例如,我只使用高速緩存級別1.如果我要在1次事務中多次加載相同的對象,會發生什麼情況? hibernate是否使用某種標識映射並緩存在1個事務中加載的對象?
到目前爲止,我已經看到了高速緩存級別1只用來放關閉sql調用,直到事務被刷新。
簡而言之,第一級緩存只是從id(主鍵)到保存與該主鍵關聯的狀態的對象的映射。
但是,你不應該混用會話和事務的概念,它們不是一回事(並且會話不一定是事務範圍的)。
如果我要在1次事務中多次加載相同的對象,會發生什麼?
將只有一個表示在數據庫中的給定行(即對於給定的ID的)對象。這就是爲什麼管理狀態成爲可能,這就是一級緩存的重點。
是否冬眠使用某種恆等映射的高速緩存和已加載1個交易
見上文中的對象。
您對身份地圖是正確的。 (N)Hibernate使用一個標識映射(http://martinfowler.com/eaaCatalog/identityMap.html)來保留之前已經加載的對象。
但是,此緩存由ISession保留,這意味着您必須共享相同的ISession對象才能利用此緩存。
如果你希望你的緩存,翻過多的ISession共享,你應該看一看(N)Hibernate的緩存2級
優勢第一級緩存在二級緩存:
1.In首先levlel緩存髒讀問題被刪除。它意味着每個對象值更新時間。
2.它減少了客戶端和數據庫之間的往返次數。
缺點第一級緩存在二級緩存:第一級緩存的
1.對象不是跨會話共享。