无法将java.math.biginger转换为java.lang.Integer

无法将java.math.biginger转换为java.lang.Integer,java,mysql,sql,hibernate,postgresql,Java,Mysql,Sql,Hibernate,Postgresql,我得到以下异常 原因: java.lang.ClassCastException:无法将java.math.BigInteger转换为 java.lang.Integer 使用以下代码 List queryResult = query.list(); for (Iterator<Object[]> it = queryResult.iterator(); it.hasNext();) { Object[] result = it.next(); Integer ch

我得到以下异常

原因:

java.lang.ClassCastException:无法将java.math.BigInteger转换为 java.lang.Integer

使用以下代码

List queryResult = query.list();

for (Iterator<Object[]> it = queryResult.iterator(); it.hasNext();) {
    Object[] result = it.next();
    Integer childId = (Integer) result[0];
    Integer grandChildCount = (Integer) result[1];
    CompanyNode childNode = childNodes.get(childId);
    childNode.setHasChildren(grandChildCount != 0);
    childNode.setIsLeaf(grandChildCount == 0);
}
有人知道吗?

您可以使用:

Integer grandChildCount = ((BigInteger) result[1]).intValue();

或者可以转换为
Number
,以涵盖
Integer
biginger
值。

数据库中的列可能是一个
十进制
。您应该将其处理为
biginger
,而不是
Integer
,否则会丢失数字。或者将列更改为
int

java.lang.Integer
不是
BigInteger
的超类。
biginger
Integer
都继承自
java.lang.Number
,因此您可以强制转换为
java.lang.Number


查看java文档

正如我们从java文档中看到的,
biginger
不是
Integer
的子类:

java.lang.Object                      java.lang.Object
   java.lang.Number                       java.lang.Number
      java.math.BigInteger                    java.lang.Integer
这就是为什么从
biginger
转换为
Integer
是不可能的

java原语的强制转换将进行一些转换(如从
double
强制转换为
int
),而类型的强制转换将永远不会转换类。

您可以尝试以下方法:

((BigDecimal) volume).intValue();
我使用
java.math.BigDecimal
转换为
int
(原语类型)


这对我来说很有用。

谢谢大家,我现在正在生产中试用,希望它现在能工作。我很困惑,因为本地数据库是由hibernate使用整数生成的,生产中也应该如此,但在生产中它被改成了int。
((BigDecimal) volume).intValue();