荫写入休眠查询和我的方法是: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
请帮
selectedDeviceID听起来像一个长对我来说,不是一个数组。你应该将对象[] selectedDeviceID的初始化更改为long [] – Rob
作为一般性评论(而不是解决你的直接问题,所以这不是一个答案)我建议尝试把方面的日志和事务管理放在方面,如果你可以,因为这可以让你将这种相当长的方法简化成只是做“真正”工作的东西。我发现这使得代码更容易阅读和理解。 –