thread test puede long failed convertir cast cannot java hibernate collections long-integer biginteger

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


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