无法将java.lang.Integer转换为java.math.BigInteger

无法将java.lang.Integer转换为java.math.BigInteger,java,hibernate,Java,Hibernate,我不熟悉hibernate和Mssql。我正在进行MySQL到Mssql的集成 我面临着一个例外: java.lang.ClassCastException:java.lang.Integer不能转换为java.math.BigInteger 我的代码是: long salesAlertsCount = ((BigInteger)HibernateUtil.getHibernateSession() .createSQLQuery("SELECT COUNT(a.id) FROM

我不熟悉hibernate和Mssql。我正在进行MySQL到Mssql的集成

我面临着一个例外:

java.lang.ClassCastException:java.lang.Integer不能转换为java.math.BigInteger

我的代码是:

long salesAlertsCount = ((BigInteger)HibernateUtil.getHibernateSession()
        .createSQLQuery("SELECT COUNT(a.id) FROM Activity as a,Lead as l WHERE a.what_id=l.id and l.deleted=0 and "
        + (currentUser.isAdmin() ? "a.tenant_id="+currentUser.getTenant_id():" (a.owner_id="+currentUser.getId()
        + " or a.createdBy_id="+currentUser.getId()+")")
        + " and "
        + (currentUser.isAdmin()?"l.tenant_id="+currentUser.getTenant_id():" (l.owner_id="+currentUser.getId()+")")
        + " and a.deleted=0 and a.action="
        + Constants.ACTIVITY_ACTION_SEND_SALES_ALERT
        + ""
        + " and a.viewed=0 AND a.created>='"
        + beginingOfMonth
        + "' ").uniqueResult()).longValue();
这是我的代码,我以前被困在这里,这段代码在MySQL中工作,但现在当我集成到Mssql中时,它显示了这个异常


提前感谢

这是因为查询返回一个整数,而您正在强制转换为BigInteger。无法将BigInteger转换为Integer,因为BigInteger的主类的类型为Number。如果可以将输出转换为Number,也可以从Number转换为biginger。

请尝试使用biginger.valueOf,而不是biginger

此外,您应该更改在HQL中设置参数的方式。这可能会带来严重的安全风险,允许用户插入恶意sql查询。相反,您应该使用如下所示的hql参数

Query query = HibernateUtil.getHibernateSession().createQuery("SELECT count(a.id) FROM Activity a, Lead l where a.what_id = l.id and a.owner_id = :owner_id"); \\ Add the rest of the code
query.setParameter("owner_id", currentUser.getId());

你可以在下面阅读更多内容。

摆脱演员阵容。我已经尝试了长时间的演员阵容,但它不起作用。不,这不起作用。对象的类型转换不会更改其动态类型。整数在转换为数字后仍然是整数,不能转换为BigInteger。
Query query = HibernateUtil.getHibernateSession().createQuery("SELECT count(a.id) FROM Activity a, Lead l where a.what_id = l.id and a.owner_id = :owner_id"); \\ Add the rest of the code
query.setParameter("owner_id", currentUser.getId());