我在一段时间后得到了这个提示并构建了我的JPA Dao查找方法:
基本上,我只返回查询中的ID,而不是返回整个对象,然后使用findById查找我知道在二级缓存中缓存的整个对象:
JPA查询:
SELECT u.id FROM User u WHERE email=:param
DAO方法:
public User findByEmail(String parameter){
TypedQuery<Long> q = getEntityManager().createNamedQuery("User.findByEmail", Long.class);
q.setParameter("param", parameter);
q.setHint("org.hibernate.cacheable", true);
q.setHint("org.hibernate.cacheRegion", "query.user");
List<Long> res = q.getResultList();
if (res != null && res.size() > 0) {
return findById(res.get(0));
}
return null;
}
但现在我查看了一些博文,例如:enter link description here 最具体的是:
查询缓存在概念上看起来像一个哈希映射,其中密钥由查询文本和参数值组成,值是与查询匹配的实体ID列表:
但如果是这种情况,我只阅读并在实际查询中返回ID是多少?无论如何,对象都不存储在查询缓存中,只存储在id中。似乎hibernate已经在做我想要优化的事情了吗?
好的,当我从数据库中读取它时,我认为需要在内存中读取少一点数据,但除此之外我不确定它是否重要。
我正在做的事情还有其他好处,即只是阅读身份证,还是有缺点?