Hibernate查询与标准性能

ber*_*ami 9 performance hibernate

我最近有一个相当奇怪的现象.必须获得包含具有不同WHERE条件的多个表的连接的计数.我首先使用hibernate的标准API实现了查询.它正确地创建了所请求的准备好的SQL语句,但速度相当慢.使用HQL重新实现整个查询.这样做是相当讨厌的,但结果的执行速度比使用Criteria API快得多.有人知道这种行为的原因吗?我假设Criteria和HQL框架使用相同的代码库将其转换为SQL.

这是查询:

select count(*) from R r where r.ISREPLACEDBY = 0 
and r.STATUS='OK' and r.A = ? 
and r.C in 
   (select distinct RC from CX cx where cx.FROMDATE >= ? and cx.FROMDATE <=?)
Run Code Online (Sandbox Code Playgroud)

ber*_*ami 17

我想我终于找到了原因.似乎每次执行预准备语句时,条件api都会创建新的变量名.每次执行语句时,数据库(在我们的示例中为DB2)都会计算新的查询执行计划.另一方面,HQL使用相同的变量名,允许数据库重用查询执行计划.