Java.math.BigInteger не может быть добавлен в java.lang.Long - программирование
Подтвердить что ты не робот

Java.math.BigInteger не может быть добавлен в java.lang.Long

У меня есть 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. Что не так?

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

Лучше использовать SQLQuery # addScalar, чем приведение к Long или BigDecimal.

Вот измененный запрос, который возвращает столбец count как 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);

Тогда

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

Ссылки по теме

Ответ 3

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

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

Ответ 4

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

Long longNumber= bigIntegerNumber.longValue();

Ответ 5

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

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

Ответ 6

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

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

Ответ 7

Представьте, что d.getId является длинным, затем заверните вот так:

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