java.math.BigInteger cannot be cast to java.lang.Long

I’m getting the following exception.

Caused by: java.lang.ClassCastException: java.math.BigInteger cannot be cast to java.lang.Long

with the following code:

@Query(value = "SELECT id FROM "+ GlobalConsts.INTELLIF_STATIC + "." +GlobalConsts.T_NAME_OTHER_DETAIL
            +" WHERE indexed < 0 and from_image_id = :from_image_id ", nativeQuery = true)
    List<Long> findFailedId(@Param("from_image_id")long from_image_id);

List<Long> failedIds = otherDetailDao.findFailedId(key);
        List<String> failedList = new ArrayList<String>();
        for (Long id : failedIds) {
            String url = ResourceHelper.generateFileName(id);
            String idStr = ResourceHelper.decodeResourceId(url);
            failedList.add(idStr);
        }

解决方法:
在mysql中,long类型的字段都用bigint来表示,所以在进行hibernate进行解析的时候,会变成BigInteger,而这时我们却用Long类型来进行解析,会直接报异常:

java.math.BigInteger cannot be cast to java.lang.Long

在这里需要修改如下代码:(如果我们需要用到long类型的字段,可以将BigInteger类型转化为long型,xxx.intValue())

@Query(value = "SELECT id FROM "+ GlobalConsts.INTELLIF_STATIC + "." +GlobalConsts.T_NAME_OTHER_DETAIL
            +" WHERE indexed < 0 and from_image_id = :from_image_id ", nativeQuery = true)
    List<BigInteger> findFailedId(@Param("from_image_id")long from_image_id);

List<BigInteger> failedIds = otherDetailDao.findFailedId(key);
        List<String> failedList = new ArrayList<String>();
        for (BigInteger id : failedIds) {
            long faiedId = id.intValue();
            String url = ResourceHelper.generateFileName(failedId);
            String idStr = ResourceHelper.decodeResourceId(url);
            failedList.add(idStr);
        }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值