繁体   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