Hibernate L2查询缓存:不要在缓存未命中时命中数据库

时间:2014-01-20 15:34:27

标签: java hibernate caching

我有一张表Users,主键为id :: int4,自然键为password :: varchar(32)。我想使用Hibernate尽快检查DB中的compund idpassword是否存在行。

所以我将所有用户加载到L2缓存并执行

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

当缓存被命中时这很好,但是在缓存未命中(这意味着错误的输入数据)时,这将触发选择查询。如果在缓存中找不到值,我怎样才能指出hibernate不会命中数据库?

我看到一个选项,可以直接从缓存中加载用户,然后使用类似session.merge()的内容。但也许有更好的方法?

PS。我还有一个投诉。如果密码不相等,我的User对象脱水性能会有很小的降低(尚未分析)。这也可以消除吗?

1 个答案:

答案 0 :(得分:0)

您正在使用L2缓存来实现其意图:缓存遇到错误始终是合法的。就其本质而言,缓存不保证是整个表的100%复制品。

如果您想要完整的User表的可靠副本,那么构建您自己的HashMap<String,String>