![](/img/trans.png)
[英]Hibernate cache: Are objects returned by a cached query stored in L2 cache?
[英]Hibernate L2 query cache: do not hit database on cache miss
我有一個表, Users
的主鍵id :: int4
和自然鍵password :: varchar(32)
。 我想使用Hibernate通過數據庫中的compund id
和password
來檢查行是否存在。
所以我將所有用戶加載到二級緩存並執行
User u = (User)session.get(User.class, uId);
if (!u.getPassword().equals(pass)) {
// fail when passwords are not equal
}
這在命中緩存時很好,但是在緩存未命中(這意味着錯誤的輸入數據)時,這將觸發選擇查詢。 如果在緩存中找不到值,如何指示休眠狀態不擊中數據庫?
我看到一個選項,可以直接從緩存中加載User,然后使用諸如session.merge()
東西。 但是也許有更好的方法?
PS。 我還有一個抱怨。 如果密碼不相等,則在User對象脫水時,我的性能會有很小的下降(尚未分析)。 也可以消除嗎?
您正在使用L2高速緩存違背其意圖:高速緩存遇到未命中總是合法的。 從本質上說,緩存不能保證是整個表的100%復制。
如果您想要完整的User表的可靠副本,則構造自己的HashMap<String,String>
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.