0

我在 Hibernate 中有一个使用条件的查询和使用 namedQuery 的相同条件 我的问题是为什么命名查询总是使用比条件更多的内存(经过多次测试) namedQuery 更快我的浅薄知识是当使用休眠时NamedQuery 它们会使用更少的内部类构造并且会使用更少的内存translation from HQL to SQL,尽管这namedQuery对于休眠来说会更直接,但似乎相反的是多次测试的小型基准测试。两个查询的结果相同。

Criteria: Clazz Test consume: 73ms... Memory Used: 3,6 MB bytes.
NamedQuery: Clazz Test consume: 39ms... Memory Used: 8,7 MB bytes.

我的简单源代码.. 非常感谢。

public class Test
{
  private final Class<Student>clazz=Student.class;
  public static void main(String[] args) 
  {
     Test clazz = new Test();
     clazz.startTime();
     clazz.getNamed(276);
     clazz.computeTime();//final Long memory = Runtime.getRuntime().freeMemory()-startFreeMemory;        
}
public Student get(Integer id)
{
    final Session session = .....
    Criteria criteriaById = session.createCriteria(clazz).add(Restrictions.idEq(id));
    Student byId = (Student) criteriaById.uniqueResult();
    session.close();
    return byId;
}
public Student getNamed(Integer id)
{
    final Session session = .....
    final Query query = session.getNamedQuery("namedQuery")
    .setParameter("id",id).setResultTransformer(transformer(clazz));                
    Student byId = (Student)query.uniqueResult();
    session.close();
    return byId;
}

}

4

0 回答 0