0

java.lang.ClassCastException: java.math.BigInteger cannot be cast to java.lang.Long在执行时遇到异常int totalCount=criteria.list().size();。请帮我找出原因和解决方案。

 public GridPageDet list(DwrParam dwrParam,UserFound user,JobFound job) throws Exception {  
            Query query = getSession().createSQLQuery(
            "select user_id from hs_cust_users where cust_id IN(select cust_id from customers where user_id=:userId)").setParameter("userId", user.getId());
            Collection<Object[]> list = (Collection<Object[]>)query.list();     

            Criteria criteria=getSession().createCriteria(Filter.class);
            criteria.createCriteria("filter.typeId", "filterType", Criteria.FULL_JOIN);
            criteria.add(Expression.eq("status", 1)); 
            if(user!=null && user.getId()!=null){
                Object statusArr [] = {1};
                criteria.createCriteria("user", "user", Criteria.FULL_JOIN);                
                criteria.add(Expression.in("status", statusArr));

                if(user.getAccess().getId().intValue() == Helper.priv.intValue() || 
                        user.getAccess`enter code here`().getId().intValue() == Helper.id.intValue()){
                    criteria.add(Expression.in("user.id", list));
                }else{
                    criteria.add(Expression.eq("user.id", user.getId()));
                }
            }

            int totalCount=criteria.list().size();
}
4

4 回答 4

2

没有看到完整的堆栈跟踪(您可以发布它吗?),我怀疑问题出在您标准的“user.id”部分。我看到您正在针对 user.getAccessGroupMap().getId(); 的返回值调用 .intValue(); 该值的返回类型是什么,它是否与 POJO 的 id 属性映射到的类型匹配?

您确定您的列表变量包含与您期望的类型匹配的对象吗?您似乎在 if 条件下将本机 SQL 与 Hibernate 代码混合在一起,并且在它们之间切换时很容易出现问题。即使这不是您的问题,您最好强类型化(即转换为比 更精确的Collection<Object[]>内容)您的列表变量,这样您就可以尽早发现其内容的类型是否与您的内容不匹配期待...

于 2013-07-24T04:35:33.887 回答
0

使用 Java Math.BigInteger.longValue()方法将 from 转换BigIntegerLong

BigInteger.longValue()

于 2013-07-24T04:39:16.310 回答
0
public GridPageDet listFilter(DwrParam dwrParam,User user,Job job) throws Exception {   
        Query query = getSession().createSQLQuery(
        "select user_id from hs_cust_users where cust_id IN(select cust_id from hs_cust_users where user_id=:userId)").setParameter("userId", user.getId());
        Collection<Object> list = (Collection<Object>)query.list();
        List<Long> l=new ArrayList<Long>();     
        for(Object obj : list){         
            l.add(Long.parseLong(obj+""));
        }               
        GridPageDet gridPgeDet=new GridPageDet();
        Criteria criteria=getSession().createCriteria(Filter.class);
        criteria.createCriteria("filterQA.typeId", "filterQAType", Criteria.FULL_JOIN);
        criteria.add(Expression.eq("status", 1)); 
        if(user!=null && user.getId()!=null){
            Object statusArr [] = {1};
            criteria.createCriteria("user", "user", Criteria.FULL_JOIN);                
            criteria.add(Expression.in("status", statusArr));           
            if(user.getAccessGroupMap().getId().intValue() == Helper.ACCESS_GROUP_MAP_COMPANY_ADMIN_ID.intValue() || 
                    user.getAccessGroupMap().getId().intValue() == Helper.ACCESS_GROUP_MAP_COMPANY_DIRECTOR_USER_ID.intValue()){
                criteria.add(Expression.in("user.id", l));
            }else{
                criteria.add(Expression.eq("user.id", user.getId()));
            }
        }
        List<ExtJSGridFilter> extJsFilterList = (List<ExtJSGridFilter>)dwrParam.getFilter();
        int totalCount=criteria.list().size();
}
于 2013-08-21T06:53:30.550 回答
-1

尝试使用这个int count = ((Long) criteria.list().size()).intValue();

于 2013-07-24T05:33:14.037 回答