簡體   English   中英

Hibernate L2查詢緩存:緩存未命中時不要命中數據庫

[英]Hibernate L2 query cache: do not hit database on cache miss

我有一個表, Users的主鍵id :: int4和自然鍵password :: varchar(32) 我想使用Hibernate通過數據庫中的compund idpassword來檢查行是否存在。

所以我將所有用戶加載到二級緩存並執行

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM