Я обнаружил проблему с производительностью с гибернацией и встроенными запросами в Oracle. Когда я выполняю сложный SQL-запрос с несколькими параметрами в TOAD, я получаю результат в miliseconds. Однако при выполнении одного и того же запроса с использованием Hibernate это время увеличивается с увеличением (до четырех секунд или даже больше).
Мой SQL-запрос довольно сложный, возвращает уникальное значение (поэтому проблема не связана с временем, необходимым для классов instation) и содержит несколько параметров с форматом: 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