Hibernate + Java 上的性能较慢,但当我使用具有相同本机 Oracle 查询的 TOAD 时速度很快
我在 Oracle 上检测到休眠和本机查询存在性能问题。当我在TOAD上执行具有多个参数的复杂SQL查询时,我以毫秒为单位获得结果。但是,当我使用Hibernate执行相同的查询时,这个时间会大大增加(最多四秒甚至更长时间)。
我的SQL查询相当复杂,返回一个唯一值(因此,问题与输入类所需的时间无关),并且它包含几个格式为“:nameParameter”的参数。此查询存储在字符串中。例如
String myNamedNativeQuery = "select count(*) from tables "+
"where column1 = :nameParameter1 "+
"and column2 = :nameParameter2";
//actually my sentence is much more complex!!
当我在TOAD上执行句子时,它在几毫秒内就解决了。但是将这句话与Hibernate一起使用
SQLQuery query = session.createSQLQuery("myNamedNativeQuery");
query.setParameter(nameParameter1, value1);
query.setParameter(nameParameter2, value2);
query.uniqueResult();
需要几秒钟才能得到相同的结果。
我意识到,如果我直接在本机查询上替换参数,然后使用Hibernate执行句子,时间就会大大减少。它将是这样的:
String strQuery = session.getNamedQuery("myNamedNativeQuery").getQueryString();
myNamedNativeQuery = myNamedNativeQuery.replace("nameParameter1", value1);
myNamedNativeQuery = myNamedNativeQuery.replace("nameParameter2", value2);
SQLQuery query = session.createSQLQuery("myNamedNativeQuery");
query.uniqueResult();
有人知道发生了什么吗??
提前致谢。
PS:Oracle版本是9i和Hibernate 3.2