[英]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.