test - netbeans mysql java math biginteger cannot be cast to java lang long
java.math.BigInteger no se puede convertir a java.lang.Long (7)
Tengo la List<Long> dynamics
. Y quiero obtener el máximo resultado utilizando Collections
. Este es mi código:
List<Long> dynamics=spyPathService.getDynamics();
Long max=((Long)Collections.max(dynamics)).longValue();
Este es mi getDynamics
:
public List<Long> getDynamics() {
Session session = null;
session = this.sessionFactory.getCurrentSession();
Query query = session
.createSQLQuery("SELECT COUNT(*) FROM SpyPath WHERE DATE(time)>=DATE_SUB(CURDATE(),INTERVAL 6 DAY) GROUP BY DATE(time) ORDER BY time;");
List<Long> result = query.list();
return result;
}
Ahora estoy recibiendo java.math.BigInteger cannot be cast to java.lang.Long
. Que pasa
¿Está seguro de que la dinámica es una List<Long>
y no una List<BigInteger>
?
Si la dinámica es una List<Long>
no necesita hacer un cast para (Long)
Imagine que d.getId es un Long, luego envuélvalo así:
BigInteger l = BigInteger.valueOf(d.getId());
Intenta convertir el BigInteger a un largo como este
Long longNumber= bigIntegerNumber.longValue();
La mejor opción es usar SQLQuery#addScalar que lanzar a Long
o BigDecimal
.
Aquí está la consulta modificada que devuelve la columna de count
como Long
Query query = session
.createSQLQuery("SELECT COUNT(*) as count
FROM SpyPath
WHERE DATE(time)>=DATE_SUB(CURDATE(),INTERVAL 6 DAY)
GROUP BY DATE(time)
ORDER BY time;")
.addScalar("count", LongType.INSTANCE);
Entonces
List<Long> result = query.list(); //No ClassCastException here
Enlace relacionado
- Jibadocs hibernate
- Consultas escalares
-
Hibernate.LONG
, recuerde que ha quedado en desuso desde la versión 3.6.X de Hibernate.
Aquí está el documento en desuso , por lo que debe usarLongType.INSTANCE
- Mi respuesta anterior
Me falta contexto, pero esto funciona bien:
List<BigInteger> nums = new ArrayList<BigInteger>();
Long max = Collections.max(nums).longValue(); // from BigInteger to Long...
Su error podría estar en esta línea:
List<Long> result = query.list();
donde query.list () está devolviendo una lista BigInteger en lugar de una lista larga. Intenta cambiarlo a.
List<BigInteger> result = query.list();
addScalar()
agregar un alias para el recuento a su consulta y luego usar el método addScalar()
como el método predeterminado para list()
en las costuras de Hibernate para que sea BigInteger
para tipos de SQL numéricos. Aquí hay un ejemplo:
List<Long> sqlResult = session.createSQLQuery("SELECT column AS num FROM table")
.addScalar("num", StandardBasicTypes.LONG).list();