2011-10-14 43 views
0

荫写入休眠查询和我的方法是:ClassCast异常

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的查询“选择GROUPID from b where nodeid in(devicelist)“这里groupid的数据类型是int并且nodeid很长

它给了我classcast异常为Ljava.lang.Object;不能被 转换为[Ljava.lang.Long;

我使用PostgresSQl

请帮

+0

selectedDeviceID听起来像一个长对我来说,不是一个数组。你应该将对象[] selectedDeviceID的初始化更改为long [] – Rob

+0

作为一般性评论(而不是解决你的直接问题,所以这不是一个答案)我建议尝试把方面的日志和事务管理放在方面,如果你可以,因为这可以让你将这种相当长的方法简化成只是做“真正”工作的东西。我发现这使得代码更容易阅读和理解。 –

回答

1

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

为什么你把它铸龙[]如果你需要分配selecteddeviceID,这已经是一个对象[], 反对[]?

尝试这样做,而不是

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

从查询nodeId是很长,所以devicelist即selecteddeviceId也应该很长,所以我试图将对象数组转换为长 – Rachel

+0

也是正确的转换为对象到代码长吗? – Rachel

+0

答复已更新。 – Jagat