java.math.BigInteger无法强制转换为java.lang.Long

Ton*_*ony 22 java collections hibernate biginteger long-integer

我有List<Long> dynamics.我希望得到最大的结果Collections.这是我的代码:

List<Long> dynamics=spyPathService.getDynamics();
        Long max=((Long)Collections.max(dynamics)).longValue(); 
Run Code Online (Sandbox Code Playgroud)

这是我的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;

    }
Run Code Online (Sandbox Code Playgroud)

现在我来了java.math.BigInteger cannot be cast to java.lang.Long.怎么了?

Ani*_*rni 30

更好的选择是使用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);
Run Code Online (Sandbox Code Playgroud)

然后

List<Long> result = query.list(); //No ClassCastException here  
Run Code Online (Sandbox Code Playgroud)

相关链接


Ami*_*leb 21

您的错误可能在此行中:

List<Long> result = query.list();
Run Code Online (Sandbox Code Playgroud)

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

List<BigInteger> result = query.list();
Run Code Online (Sandbox Code Playgroud)


Abs*_*act 8

尝试像这样将BigInteger转换为long

Long longNumber= bigIntegerNumber.longValue();
Run Code Online (Sandbox Code Playgroud)