处理Sys refcursor时如何解决java.lang.ClassCastException?

时间:2018-10-26 11:11:03

标签: java spring hibernate

我有以下代码

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

存储的proc返回与以下查询等效的ref游标

 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]具有像1,2,10,687等的Long值,

1 个答案:

答案 0 :(得分:2)

您不能将Big Decimal转换为Long,无论如何使用

可以从中获取Long值。
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="container2">
  <div class="containerr">
    <div class="pic" id="content">
      <div id="container">

        <div class="box" ondrop="drop(event)" ondragover="allowDrop(event)" id="10">
          <p name="values"></p>
        </div>
        <div class="box" ondrop="drop(event)" ondragover="allowDrop(event)" id="11">
          <p name="values"></p>
        </div>
        <div class="box" ondrop="drop(event)" ondragover="allowDrop(event)" id="12">
          <p name="values"></p>
        </div>
        <div class="box" ondrop="drop(event)" ondragover="allowDrop(event)" id="13">
          <p name="values"></p>
        </div>
      </div>
    </div>
  </div>
</div>

<div class="box002" draggable="true" ondragstart="drag(event)" id="2">
  <img src="" draggable="true" id="slide" border="rounded" />
</div>

如果不起作用,则将行强制转换为大十进制,然后

row[0].longValue()

所以您的代码看起来像这样

(BigDecimal) row[0].longValue()

或尝试将循环更改为

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

如果您不想使用投射

阅读您的评论后。

for(BigDecimal[] row : resultSet)