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); }