Je reçois l'exception suivante.
Causé par:
Java.lang.ClassCastException: Java.math.BigInteger ne peut pas être converti en Java.lang.Integer
avec le code suivant
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);
}
à cette ligne
Integer grandChildCount = (Integer) result[1];
Quelqu'un a-t-il une idée?
Vous pouvez utiliser:
Integer grandChildCount = ((BigInteger) result[1]).intValue();
Ou peut-être utiliser Number
pour couvrir à la fois les valeurs Integer
et BigInteger
.
Comme nous le voyons dans javaDoc, BigInteger
n'est pas une sous-classe de Integer
:
Java.lang.Object Java.lang.Object
Java.lang.Number Java.lang.Number
Java.math.BigInteger Java.lang.Integer
Et c’est la raison pour laquelle il est impossible de passer de BigInteger
à Integer
.
La conversion des primitives Java effectue certaines conversions (comme la conversion de double
à int
), tandis que la conversion des types ne transformera jamais les classes.
Java.lang.Integer
n'est pas une super classe de BigInteger
. BigInteger
et Integer
héritent tous deux de Java.lang.Number
, vous pouvez donc transtyper en Java.lang.Number
.
Voir la documentation Java http://docs.Oracle.com/javase/1.5.0/docs/api/Java/lang/Number.html
La colonne dans la base de données est probablement une DECIMAL
. Vous devriez la traiter comme une BigInteger
, pas une Integer
, sinon vous perdez des chiffres. Sinon, remplacez la colonne par int
.
Vous pouvez essayer ceci:
((BigDecimal) volume).intValue();
J'utilise Java.math.BigDecimal
convertir en int
(type primitif).
C'est travaillé pour moi.