我的查询需要连续运行大约200次,并且参数不同。查询(与Hibernate生成的相同)本身非常快(sub 1ms)但是每个查询的Hibernate开销为2-3 ms,大约为500 ms ......
即使我简化了查询并删除了所有参数,我也会使用Criteria或Named查询获得相同的结果。当使用简单的Session.get(Class,Id)时,获取同一个实体所需的时间不到1ms,因此我知道Hibernate能够足够快地从数据库中获取和创建对象。
数据库中只有一行,这需要3毫秒:
Criteria criteria = sessionFactory.getCurrentSession().createCriteria(TestEntity.class)
criteria.list();
虽然这需要0毫秒:
sessionFactory.getCurrentSession().get(TestEntity.class, 1);
这种开销的原因是什么?有什么方法吗?
运行:Hibernate 4.3.4.Final,Spring 4.0.2.RELEASE和MySQL 5.5.35。
编辑: 这是我正在测试的实体:
@Entity
@Table(name = "TEST")
public class TestEntity implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue
@Column(name = "ID", updatable = false, insertable = false)
public long id;
@Column(name = "VALUE")
public BigDecimal value;
public TestEntity() {
super();
}
}