Как решить java.lang.ClassCastException при обработке рефрактора Sys? - PullRequest
0 голосов
/ 26 октября 2018

У меня есть код ниже

StoredProcedureQuery storedProcedure = em.createStoredProcedureQuery("pkg_p.proc_p");
         storedProcedure.getResultList();

сохраненный процесс возвращает указатель ссылки, эквивалентный приведенному ниже запросу

 select 1 as id_col, 'My Name ' as name , 1000 as sal from dual;

У меня есть класс pojo MyTable, который эквивалентен типу возврата набора результатов запроса

 public class MyTable {
 private Long idCol;
 private String name;
 private Long sal;

 /// setter and getters omitted for brevity

}

for(Object[]row: resultSet)
        {
MyTable mt = new MyTable ();
mt.setIdCol((Long)row[0]);  ///throw class cast exception
}

Как устранить приведенную ниже ошибку

Ошибка обработки запроса; вложенное исключение java.lang.ClassCastException: java.math.BigDecimal не может быть приведен к java.lang.Long

Несмотря на то, что строка [0] имеет длинные значения, такие как 1,2,10,687 и т. Д.

1 Ответ

0 голосов
/ 26 октября 2018

Вы не можете привести Большой Десятичный к Длинному, как только вы можете получить из него значение Long, используя

row[0].longValue()

, если это не сработает, приведите строку к большому десятичному числу и

(BigDecimal) row[0].longValue()

чтобы ваш код выглядел примерно так

mt.setIdCol((BigDecimal)row[0].longValue());

или попробуйте изменить цикл на

for(BigDecimal[] row : resultSet)

, если вы не хотите использовать приведение

после прочтения ваших комментариев.

    for(Object[] row: resultSet) {
        MyTable mt = new MyTable();
        if(resultSet instanceof BigDecimal) {
            mt.setIdCol((BigDecimal)row[0].longValue());
        } else if (resultSet instanceof String){
            ....
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...