Tengo List<Long> dynamics. Y quiero llegar a max el resultado de 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 me estoy poniendo java.math.BigInteger cannot be cast to java.lang.Long. Qué tiene de malo?

  • Yo diría que usted está tratando de lanzar un BigInteger a un Long.
  • Porque un java.math.BigInteger instancia de la clase no una instancia de java.lang.Long clase.
  • Vas a tener que dar más de código si desea obtener más ayuda. Tal vez la línea que el error está señalando? Y qué tipo de getDynamics() devuelven?
  • tienes la respuesta en tu pregunta, supongo que esto Collections.max(dynamics)) es BigInteger, y usted está tratando de echarlo a largo, intentar echarlo a BigInteger y, a continuación, utilizar longValue()método
  • Ok gente, él claramente etiquetados de su dinámica lista como un List<Long>. @Tony Comprobar el tipo de retorno de spyPathService.getDynamics(). Suponiendo que el error es en realidad proviene de estas líneas de código, me imagino que a partir de este código que spyPathService.getDynamics() se devuelve una Lista que, al menos, incluye algunos BigIntegers
InformationsquelleAutor Tony | 2013-08-21

7 Comentarios

  1. 21

    Su error puede estar en esta línea:

    List<Long> result = query.list();

    donde la consulta.lista() devuelve un BigInteger Lista en lugar de la Larga lista. Tratar de cambiarlo.

    List<BigInteger> result = query.list();
    • Voy a elegir.
    • Como @StormeHawke dijo: ‘…en realidad es que devuelve una Lista que, al menos, incluye algunos BigIntegers’. Así que es mejor averiguar exactamente, antes de ejecutar en el siguiente problema de este tipo.
    • Esta respuesta está equivocada suposición acerca de la interna de Hibernación de envoltura de tipos! La única Aniket Kulkarni respuesta SQLQuery#addScalar es bien!
    • Yo también tipo de fundición de la lista
  2. 29

    Mejor opción es utilizar SQLQuery#addScalar de la fundición a la Long o BigDecimal.

    Aquí es modificado consulta que devuelve count columna 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);

    Luego

    List<Long> result = query.list(); //No ClassCastException here  

    Enlace relacionado

    • Eres el héroe! +1, pero realmente +100!
  3. 5

    Intentar convertir la BigInteger para un tiempo como este

    Long longNumber= bigIntegerNumber.longValue();
  4. 2

    Me falta contexto, pero esto está funcionando muy bien:

    List<BigInteger> nums = new ArrayList<BigInteger>();
    Long max = Collections.max(nums).longValue(); //from BigInteger to Long...
    • He oído que COUNT(*) instrucción devuelve Long. ¿No es así?
  5. 1

    Usted necesita para agregar un alias para la cuenta para su consulta y, a continuación, utilizar la addScalar() método como el predeterminado para list() método de Hibernación costuras a ser BigInteger numérica de los tipos SQL. Aquí está un ejemplo:

    List<Long> sqlResult = session.createSQLQuery("SELECT column AS num FROM table")
        .addScalar("num", StandardBasicTypes.LONG).list();
  6. 0

    Son usted seguro de que la dinámica es un List<Long> y no List<BigInteger> ?

    Si la dinámica es un List<Long> no es necesario hacer una conversión a (Largo)

Dejar respuesta

Please enter your comment!
Please enter your name here