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

Joh*_*ith 4 java sql long-integer

我想使用本机sql返回行数.但控制台说我java.math.BigInteger cannot be cast to java.lang.Long.怎么了?这是我的方法:

public Long getNumRows(Integer id){

        Session session = null;

        session = this.sessionFactory.getCurrentSession();
        Query query = session
                .createSQLQuery("SELECT COUNT(*) FROM controllnews WHERE news_id="
                        + id + ";");
        List firstResult = query.list();

        return (Long) firstResult.get(0);


    }
Run Code Online (Sandbox Code Playgroud)

Roh*_*ain 12

使用BigInteger#longValue()方法,而不是将其强制转换为Long:

return firstResult.get(0).longValue();
Run Code Online (Sandbox Code Playgroud)

好像firstResult.get(0)回报一样Object.一种选择是强制转换为BigInteger:

return ((BigInteger)firstResult.get(0)).longValue();
Run Code Online (Sandbox Code Playgroud)

但是不要这样做.而是使用Nambari在评论中提供的方式.我不是Hibernate的用户,所以我不能提供Hibernate特定的解决方案.

  • (或)使用hibernate标量http://docs.jboss.org/hibernate/orm/3.6/reference/en-US/html/querysql.html (2认同)