Hibernate 如果查询只返回ID',那么它是否会影响eh querycache内存消耗;s

Hibernate 如果查询只返回ID',那么它是否会影响eh querycache内存消耗;s,hibernate,jpa,ehcache,Hibernate,Jpa,Ehcache,我不久前得到了这个技巧,并构建了我的JPA Dao查找方法,如下所示: 基本上,不是返回整个对象,而是在查询中只返回ID,然后使用findById查找整个对象,我知道该对象缓存在二级缓存中: JPA查询: SELECT u.id FROM User u WHERE email=:param DAO方法: public User findByEmail(String parameter){ TypedQuery<Long> q = getEntityManager().cre

我不久前得到了这个技巧,并构建了我的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;
}
公共用户findByEmail(字符串参数){
TypedQuery q=getEntityManager().createNamedQuery(“User.findByEmail”,Long.class);
q、 设置参数(“参数”,参数);
q、 setHint(“org.hibernate.cacheable”,true);
q、 setHint(“org.hibernate.cacheRegion”、“query.user”);
List res=q.getResultList();
如果(res!=null&&res.size()>0){
返回findById(res.get(0));
}
返回null;
}
但现在我看了一些博客文章,例如: 最具体地说:

查询缓存在概念上类似于哈希映射,其中键由查询文本和参数值组成,值是与查询匹配的实体Id列表:

但如果是这种情况,那么在实际查询中只读取并返回ID又有多重要呢?无论如何,这些对象都不会存储在查询缓存中,只存储id。hibernate似乎已经在做我要优化的事情了

好的,当我从数据库中读取数据时,我认为需要在内存中读取的数据少了一点,但除此之外,我不确定这是否重要


我所做的工作还有其他好处吗,即只是读取id,或者甚至有缺点吗?

您可能想在这里查看这个答案。总之,一列或多列的数据库性能是相同的。这同样适用于Hibernate完成的数据到对象的映射,这不会有太大的区别,可能是在将其他列映射到pojo时会增加.001秒。谢谢。然而,这个问题更多的是关于数据库性能以及如何读取列。我的问题更多的是关于VM中的内存消耗,以及仅仅读取id与读取所有列是否重要。但我想不会太多。