2014-01-20 51 views
0

我有一個表,Users,主鍵爲id :: int4,自然鍵爲password :: varchar(32)。我想使用Hibernate儘可能快地檢查數據庫中的組合idpassword是否存在一行。休眠L2查詢緩存:不要在緩存中缺少命中數據庫

所以我加載所有用戶的L2高速緩存,並做

User u = (User)session.get(User.class, uId); 
if (!u.getPassword().equals(pass)) { 
    // fail when passwords are not equal 
} 

這是一件好事,當緩存被擊中,但在高速緩存未命中(這意味着輸入數據錯誤),這將觸發select查詢。如果在緩存中沒有找到值,我怎麼才能指出hibernate不要命中數據庫?

我看到一個選項,直接從緩存中加載用戶,然後使用類似session.merge()它。但也許有更好的方法?

PS。我還有一個抱怨。如果密碼不相同,我的用戶對象脫水時性能會降低(尚未進行配置)。這也可以消除?

回答

0

您正在使用二級緩存來反對它的意圖:緩存經歷一次未命中通常是合法的。就其性質而言,緩存不保證是整個表的100%副本。

如果您想要一個完整的用戶表的可靠副本,然後構建您自己的HashMap<String,String>