2014-12-19 4 views
0

Я использую Spring + Hibernate. Ниже приведен фрагмент кода из моего java-метода. После выдачи запроса он ждет долгое время. Размер стола очень маленький. И это происходит с перерывами (не всегда). Я не вижу никаких исключений. не могли бы вы сообщить мне, как отладить эту проблему.DB не возвращает ответ

Код сниппета:

BigDecimal id = null; 
id = (BigDecimal) getHibernateTemplate().execute(new HibernateCallback<Object>() { 
    public Object doInHibernate(Session session)throws HibernateException, SQLException { 
    Query roleDetails = session.createSQLQuery("select role_id from employee where emp_id = '"+eid+"'"); 
        return roleDetails.uniqueResult(); 
} 
}); 
+0

Сколько времени это займет? Время использования System.currentTimeInMillis(), а также проверить его, выполнив тот же запрос через SQLDeveloper. –

+0

запрос очень прост. Если я буду работать в TOAD, это займет всего несколько миллисекунд. Проблема прерывистая. – Srinivasan

+0

Возможно, вы захотите также выполнить план SQL EXPLAIN по запросу. – Brad

ответ

0

С данной детали это трудно понять, что может быть причиной проблемы. Я бы предложил две вещи:

  1. Прокси-сервер вашего источника данных и посмотреть время выполнения запроса с конца java. Вы можете сделать это, используя библиотеку datasource-proxy.

  2. Trace oraclesessions и understand если что-то не так на стороне оракула.

0

Кэширование существует для запросов как внутри Hibernate, так и внутри Oracle, но работает только при использовании подготовленных операторов с параметрами, иначе это может повредить.

Попробуйте изменить конкатенации в вашем коде параметризованных запросов:

Query roleDetails = session.createSQLQuery("select role_id from employee where emp_id = ':empId").setInteger("empId", eid); 
Смежные вопросы