Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java中的类强制转换异常_Java_Hibernate_Postgresql - Fatal编程技术网

java中的类强制转换异常

java中的类强制转换异常,java,hibernate,postgresql,Java,Hibernate,Postgresql,我正在hibernate中编写查询,我的方法是: public String a(Object[] selectedAlarmId, Object[] selecteddeviceID, String loggedInUser, String clientIp, String role) throws Exception { int result = 0; b grp = new b(); try {

我正在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);
    }
公共字符串a(对象[]已选择的字符串),
对象[]selecteddeviceID、字符串loggedInUser、字符串clientIp、,
字符串(角色)引发异常{
int结果=0;
b grp=新的b();
试一试{
会话hiberSession=HibernateSessionFactory.currentSession();
事务处理=hiberSession.beginTransaction();
List deviceQueryList=null;
字符串clauseAppender=(“从AlarmMappingBean中选择最大(严重性),devicenodeid,其中,(:devicelist)组中的devicenodeid由devicenodeid确定”);
Query deviceQuery=hiberSession.createQuery(clauseAppender);
deviceQuery.setParameterList(“devicelist”,selecteddeviceID);
deviceQueryList=deviceQuery.list();
迭代器iter=deviceQueryList.Iterator();
而(iter.hasNext()){
Object[]objAlarm=iter.next();
System.out.println(objAlarm.length);
System.out.println(“严重性->”+objAlarm[0]);
System.out.println(“设备节点ID->”+objAlarm[1]);
查询updateNamedNode=hiberSession
.createQuery(“更新ManagedNode set highestSeverity=?其中nodeId=?”;
setParameter(0,objAlarm[0]);
setParameter(1,Long.parseLong(objAlarm[1].toString());
//updateManagedNode.executeUpdate();
}
//Long[]设备阵列=(Long[])选择的设备ID;
此处发生异常-->对象[]devArray=(长[])selecteddeviceID;
querygroupquery=hiberSession
.createQuery(“从b中选择groupId,其中节点ID位于(:devicelist)”;
setParameterList(“devicelist”,devArray);
List devicelist=new ArrayList();
devicelist=groupQuery.list();
if(!(devicelist.isEmpty()){
迭代器itergroup=devicelist.Iterator();
while(itergroup.hasNext()){
ManagedNode objgroup=itergroup.next();
grp.updateGroupHighestSeverity(objgroup.getGroupId());
}
}
commit();
}捕获(例外e){
e、 printStackTrace();
投掷e;
}最后{
HibernateSessionFactory.closeSession();
}
返回整数.toString(结果);
}
此处,selecteddeviceId的值为[123412345,null,null] 从表b“selectgroupid fromB,其中nodeid in(devicelist)”中进行查询,这里groupid的数据类型为int,nodeid为long

它给了我类cast异常作为Ljava.lang.Object;不可能 转换为[Ljava.lang.Long

我正在使用
postgresql


请从您的代码中获得帮助:
Object[]devArray=(Long[])selecteddeviceID;

如果需要将已是对象[]的selecteddeviceID分配给对象[],为什么要将其强制转换为Long[]

试着这样做

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

selectedDeviceID对我来说听起来像是一个long,而不是一个数组。您应该将initialize从object[]selectedDeviceID更改为long[],作为一般注释(并且没有解决您眼前的问题,因此这不是答案)如果可以的话,我建议尝试将日志记录和事务管理放在各个方面,因为这样可以将相当长的方法归结为“真正”的方法工作。我发现这使代码更易于阅读和理解。从查询中,nodeId很长,因此devicelist(即selecteddeviceId)也应该很长,因此我正在尝试将对象数组转换为long。将对象转换为long是否正确,如代码中所做的那样??java.lang.ArrayStoreException..我得到了您的v的Exception类型值不长,您无法将其他对象存储到长数组中。selectedeviceid coantains[1,2,3,null,null,null]…hw我要将其转换为长吗??