我有一个使用Spring 4和Hibernate 4作为JPA的项目。我有一个DAO层bean,其方法如下:
@Transactional
public MyDtoObject getDataWithALotAggregation(String params){
String queryStr = "select aLotAggregatedData from aLotJoinedTables where aLotParams="+params;
Object[] rawData = sessionFactory
.getCurrentSession()
.createSQLQuery(queryStr)
.uniqueResult();
return mapRawDataToMyDtoObject(rawData);
}
,我只是将此方法的时间与jdbcTemplate.queryForObject(queryStr, mapper, params)
的时间进行了比较,
我很惊讶Hibernate比JDBC API快一点(〜5-10%)。
有人知道为什么Hibernate更快或JdbcTemplate这么慢吗?
我确定,尤其是在事务处理方面,Hibernate应该比JdbcTemplate慢...
答案 0 :(得分:1)
之所以变慢的原因很可能是因为hibernate生成的查询与您的查询不同。
我的猜测是您的代码中包含此.uniqueResult();
,用于检查重复的对象。数据集越大,您遇到的情况就越多。但是,它可能是映射的列数。请求的列越多,响应速度越慢。