我有一张表Users
,主键为id :: int4
,自然键为password :: varchar(32)
。我想使用Hibernate尽快检查DB中的compund id
和password
是否存在行。
所以我将所有用户加载到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对象脱水性能会有很小的降低(尚未分析)。这也可以消除吗?
答案 0 :(得分:0)
您正在使用L2缓存来实现其意图:缓存遇到错误始终是合法的。就其本质而言,缓存不保证是整个表的100%复制品。
如果您想要完整的User表的可靠副本,那么构建您自己的HashMap<String,String>
。