Ошибка появляется, если VO выполняется сначала с ограчением в n1 предикатов, затем в n2 предикатов, причем n2 < n1. Пример:
Для устранения ошибки достаточно принудительно очистить ограничение (раскомментировать строки во втором выполнении)
CausesVOImpl causeVO = getAm().getCausesVO1(); // первое выполнение if (!causeVO.isPreparedForExecution()){ causeVO.setMaxFetchSize(999); } causeVO.executeEmptyRowSet(); causeVO.setWhereClause("CAUSE_NUMBER > :1 and GROUP_ID = :2"); causeVO.setWhereClauseParam(0, causeNumber); causeVO.setWhereClauseParam(1, groupId); causeVO.executeQuery(); // второе выполнение CausesVOImpl causeVO = getAm().getCausesVO1(); if (!causeVO.isPreparedForExecution()){ causeVO.setMaxFetchSize(999); } causeVO.executeEmptyRowSet(); // causeVO.setWhereClause(null); // causeVO.setWhereClauseParams(null); causeVO.setWhereClause("GROUP_ID = :1"); causeVO.setWhereClauseParam(0, getEntityId()); try{ causeVO.executeQuery(); }catch (Exception e){ System.out.println(e.getMessage()); }В приведенном примере ошибка возникнет при втором вызове executeQuery(). Как видим, setWhereClause и setWhereClauseParam не перекрывают ранее заданные значения.
Для устранения ошибки достаточно принудительно очистить ограничение (раскомментировать строки во втором выполнении)
Комментариев нет :
Отправить комментарий