hibernate中的SQL查询非常慢,同时使用SQL客户端非常快

时间:2014-01-06 15:37:10

标签: java hibernate h2

我知道有很多类似的问题,但我找不到这个问题的答案:

我对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数据库。

  1. 当我在应用程序中运行代码时,执行大约需要20秒(结果集包含大约6000行)
  2. 如果我在应用程序中编码,调用Session.createSQLQuery(query).list(),其中query是hibernate为上面的代码生成的sql,执行大约需要30秒。
  3. 当我使用H2 shell甚至浏览器客户端直接执行SQL查询时,执行时间不到一秒。
  4. 这三种执行相同查询的方式之间存在巨大差异的原因可能是什么。我希望hibernate有一个开销,但不是这个数量。

0 个答案:

没有答案