java中的ClassCast异常



我在hibernate中写一个查询,我的方法是:

public String a(Object[] selectedAlarmId,
            Object[] selecteddeviceID, String loggedInUser, String clientIp,
            String role) throws Exception {
        int result = 0;
        b grp = new b();
        try {
            Session hiberSession = HibernateSessionFactory.currentSession();
            Transaction transaction = hiberSession.beginTransaction();
            List deviceQueryList = null;
            String clauseAppender = ("select max(severity),devicenodeid  from AlarmMappingBean where devicenodeid in (:devicelist) group by devicenodeid");
            Query deviceQuery = hiberSession.createQuery(clauseAppender);
            deviceQuery.setParameterList("devicelist", selecteddeviceID);
            deviceQueryList = deviceQuery.list();
            Iterator<Object[]> iter = deviceQueryList.iterator();
            while(iter.hasNext()){              
                Object[] objAlarm = iter.next();
                System.out.println(objAlarm.length);
                System.out.println("Severity - > " + objAlarm[0]);
                System.out.println("Device Node ID - > " + objAlarm[1]);            
                Query updateMangedNode = hiberSession
                .createQuery("update ManagedNode  set highestSeverity =? where nodeId = ?");
                updateMangedNode.setParameter(0, objAlarm[0]);
                updateMangedNode.setParameter(1, Long.parseLong(objAlarm[1].toString()));               
                //updateMangedNode.executeUpdate();
            }
        //  Long[] deviceArray =(Long[]) selecteddeviceID; 
        Exception occurs here-->    Object[] devArray = (Long[]) selecteddeviceID;

            Query groupQuery = hiberSession
                    .createQuery("select groupId from b where nodeId in (:devicelist)");
              groupQuery.setParameterList("devicelist", devArray);
            List<ManagedNode> devicelist = new ArrayList<ManagedNode>();
            devicelist = groupQuery.list();
            if(!(devicelist.isEmpty() )){
            Iterator<ManagedNode> itergroup =devicelist.iterator(); 
            while(itergroup.hasNext()){
                ManagedNode objgroup = itergroup.next();                
                grp.updateGroupHighestSeverity(objgroup.getGroupId());
            }

            }
            transaction.commit();

        } catch (Exception e) {
            e.printStackTrace();
            throw e;
        } finally {
            HibernateSessionFactory.closeSession();
        }
        return Integer.toString(result);
    }

此处的selecteddeviceId的值为[1234,12345,null, null]从表b中查询"select groupid from b where nodeid in(devicelist)",其中groupid的数据类型为int, nodeid为long

它给了我类cast异常作为Ljava.lang.Object;不能

转换为[Ljava.lang.Long;

我使用PostgresSQl

请帮

从你的代码:Object[] devArray = (Long[]) selecteddeviceID;

如果你需要分配selecteddeviceID(已经是Object[])给Object[],为什么要将它转换为Long[] ?

试着这样做

 Long[] devArray = Arrays.copyOf(selecteddeviceID, selecteddeviceID.length, Long[].class)

最新更新