无法将java.math.biginger转换为java.lang.Integer
我得到以下异常 原因: java.lang.ClassCastException:无法将java.math.BigInteger转换为 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
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();