我在 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;
}
}