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

时间:2013-08-21 15:27:41

标签: java hibernate collections long-integer biginteger

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

8 个答案:

答案 0 :(得分:28)

更好的选择是使用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  

相关链接

答案 1 :(得分:21)

您的错误可能在此行中:

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

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

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

答案 2 :(得分:4)

尝试将BigInteger转换为像这样的长

Long longNumber= bigIntegerNumber.longValue();

答案 3 :(得分:2)

我缺乏背景,但这很好用:

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

答案 4 :(得分:1)

您需要为查询添加计数别名,然后将addScalar()方法用作Hibernate接缝中list()方法的默认值,以便BigInteger用于数字SQL类型。这是一个例子:

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

答案 5 :(得分:0)

您确定动态是List<Long>而不是List<BigInteger>吗?

如果动态是List<Long>,则不需要对(长)

进行强制转换

答案 6 :(得分:0)

想象一下d.getId是一个Long,然后像这样包裹:

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

答案 7 :(得分:0)

这是一个非常古老的文章,但是如果它有益于任何人,我们可以做这样的事情:

graph_tool.libgraph_tool_core.Vertex