Tomcat: 5,5
Oracle: 11G (11.1.0.7.4)
JDK: 1,6
Спящий режим: 3.0,5
Контекст
Мы используем Hibernate, чтобы получить количество строк в представлении.Представление написано так, что оно всегда получит хотя бы одну строку.В базе данных достаточно строк для представления, чтобы вернуть 8 строк.
Проблема
Время от времени мы получаем значение НОЛЬ
Еслимы пытаемся снова (т. е. пользователь обновляет экран), возвращается правильный счет 8.
Расследование
Мы пытались сделать несколько вещей, чтобы исключить следующее
1) сервер Oracle возвращает неверный результат
2) проверил представление, чтобы убедиться, что оно хорошее, т.е. вернет правильный результат
Теперь подозрение поворачивается в сторону Hibernate
Фрагмент кода
Можете ли вы найти что-нибудь подозрительное в приведенном ниже коде?
public static int getRowCount( Criteria criteria )
{
int totalRows = 0;
criteria.setProjection( Projections.rowCount() );
Integer count = ( Integer ) criteria.uniqueResult();
if ( count != null )
totalRows = count.intValue();
criteria.setProjection( null );
criteria.setResultTransformer( Criteria.ROOT_ENTITY );
return totalRows;
}
Мы также убедились, что счетчик равен нулю, а не нулю
Как это ни странно звучит,публикуются дефекты Oracle, в которых возвращаются неверные результаты, и, кроме того, эта ошибка стала возникать, когда мы применили оперативное исправление Oracle.
Вопрос
Кто-нибудь думает, что возможно, что Oracle может вернуть incorrec?
Любое предложение о том, как решить эту проблему, также будет оценено ...
Краткое изложение некоторых ключевых фактов
- Это произошло примерно в то же время, когда мыобновил Oracle11G с 11.1.0.6.1 до 11.1.0.7.4 и сделал несколько исправлений.
- Это было единственное изменение, произошедшее с экосистемой за этот период времени - Изменения в Oracle
- Это происходит непоследовательно.Теперь вы видите проблему. Теперь нет.
- Нечасто.Но достаточно серьезный, чтобы вызвать тревогу.