我知道有很多类似的问题,但我找不到这个问题的答案:
我对hibernate不是很熟悉,但我正在开发一个包含极慢的hibernate查询的应用程序。此查询是从代码中的一个非常简单的查询生成的:
Criteria crit = session.createCriteria(clazz); // clazz is the class of the Entities to load
return crit.list();
可能有很多可能使这个查询极其缓慢(hibernate绑定,驱动程序等等),但我不明白的是:我设置hibernate输出它执行的SQL语句。上面的代码被翻译成一个非常长的查询,包含3个内部联接和9个左外部联接,结果显示在一个包含大约80列的表中。但是,我确信只有这个单独的SQL语句是由hibernate生成的,并为此代码执行。
我正在使用H2数据库。
Session.createSQLQuery(query).list()
,其中query
是hibernate为上面的代码生成的sql,执行大约需要30秒。这三种执行相同查询的方式之间存在巨大差异的原因可能是什么。我希望hibernate有一个开销,但不是这个数量。