我有以下代碼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即使 row[0] 具有 Long 值,如 1,2,10,687 等
1 回答

幕布斯7119047
TA貢獻1794條經驗 獲得超8個贊
您不能將 Big Decimal 轉換為 Long,您可以使用它從中獲取 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){
....
}
}
添加回答
舉報
0/150
提交
取消