Ява.математика.BigInteger не может быть приведен к java.ленг.Длинный

у меня есть List<Long> dynamics. И я хочу получить максимальный результат, используя Collections. Вот мой код:

List<Long> dynamics=spyPathService.getDynamics();
        Long max=((Long)Collections.max(dynamics)).longValue(); 

это мой 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;

    }
Я java.math.BigInteger cannot be cast to java.lang.Long. Что случилось?

7 ответов


ваша ошибка может быть в этой строке:

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

где запрос.list () возвращает список BigInteger вместо длинного списка. Попробуйте изменить его на.

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

лучший вариант-это использовать SQLQuery#addScalar по сравнению с литьем в Long или BigDecimal.

здесь изменен запрос, который возвращает


попробуйте преобразовать BigInteger в длинный, как это

Long longNumber= bigIntegerNumber.longValue();

мне не хватает контекста, но это работает просто отлично:

List<BigInteger> nums = new ArrayList<BigInteger>();
Long max = Collections.max(nums).longValue(); // from BigInteger to Long...

вам нужно добавить псевдоним для count в ваш запрос, а затем использовать addScalar() метод по умолчанию для list() метод в Спящих швах должен быть BigInteger для числовых типов в SQL. Вот пример:

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

вы уверены, что динамика-это List<Long>, а не List<BigInteger> ?

Если динамика List<Long> вам не нужно делать бросок (долго)


представьте d.getId длинный, затем оберните так:

BigInteger l  = BigInteger.valueOf(d.getId());