我有以下代码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
提交
取消