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 。怎么了?

原文由 Tony 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 885
2 个回答

您的错误可能在这一行:

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

其中 query.list() 返回一个 BigInteger 列表而不是长列表。尝试将其更改为。

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

原文由 Amin Abu-Taleb 发布,翻译遵循 CC BY-SA 3.0 许可协议

更好的选择是使用 SQLQuery#addScalar 而不是转换为 LongBigDecimal

这是修改后的查询,返回 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

相关链接

这是已弃用的文档,因此您必须使用 LongType.INSTANCE - 我之前的回答

原文由 Aniket Kulkarni 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题