Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.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 无法将getNamedQuery结果强制转换为表类_Java_Hibernate_Classcastexception - Fatal编程技术网

Java 无法将getNamedQuery结果强制转换为表类

Java 无法将getNamedQuery结果强制转换为表类,java,hibernate,classcastexception,Java,Hibernate,Classcastexception,在过去的4个小时里,我一直在寻找和尝试我在谷歌上搜索的用于转换命名查询结果的教程,但没有找到可行的解决方案。当我运行下面的代码片段时,我收到一个java.lang.ClassCastException错误(见下文) 我从使用sessionCriteria(有效)获取整个记录结果切换到使用getNamedQuery只返回表列中的3列 原始代码块 Criteria sessionCriteria = session.createCriteria(RunContainer.class); @Sup

在过去的4个小时里,我一直在寻找和尝试我在谷歌上搜索的用于转换命名查询结果的教程,但没有找到可行的解决方案。当我运行下面的代码片段时,我收到一个
java.lang.ClassCastException
错误(见下文)

我从使用
sessionCriteria
(有效)获取整个记录结果切换到使用
getNamedQuery
只返回表列中的3列


原始代码块

Criteria sessionCriteria = session.createCriteria(RunContainer.class);

@SuppressWarnings ("unchecked")
List<RunContainer> runContainer = sessionCriteria.list();
Query query = session.getNamedQuery("RunContainer.GetRunsForCalendar");

List results = query.list();

for(int i = 0; i < results.size(); i++){
    RunContainer result = (RunContainer)results.get(i);
    System.out.println(result.getNotes());
}
错误

java.lang.ClassCastException:
[Ljava.lang.Object; cannot be cast to com.scene7.is.qa.jorogumo.tables.RunContainer

有人能帮我调试一下吗?我对Java相当陌生,这是我第一个与工作相关的项目


接受答案的工作代码 如果有人碰到这篇文章,下面的代码就是我从接受的答案中得到的

Query query = session.getNamedQuery("RunContainer.GetRunsForCalendar");
List<Object> containerResults = query.list();
List<RunContainer> runContainers = new ArrayList<RunContainer>();

for (Object result : containerResults) {

    Object[] temp = (Object[]) result;
    RunContainer runContainer = new RunContainer();

    runContainer.setId((Integer) temp[0]);
    runContainer.setDate((Date) temp[1]);
    runContainer.setNotes((String) temp[2]);

    runContainers.add(runContainer);
}
Query Query=session.getNamedQuery(“RunContainer.GetRunsForCalendar”);
List containerResults=query.List();
List runContainers=new ArrayList();
for(对象结果:containerResults){
对象[]临时=(对象[])结果;
RunContainer RunContainer=新的RunContainer();
runContainer.setId((整数)temp[0]);
runContainer.setDate((Date)temp[1]);
runContainer.setNotes((字符串)temp[2]);
添加(runContainer);
}
试试这个:
query.setResultTransformer(Transformers.aliasToBean(RunContainer.class))
请参阅此处的文档:

SELECT子句查询多个列或实体,并显示结果 在java.util.List中的对象数组(object[])中聚合 由getResultList()返回

在这里,您将其强制转换为
RunContainer
,这会导致问题。遍历列表并从数组中获取单个字段

List containerResults = query.List(); 

    for(Object[] result : containerResults) 
    {
       Integer id = (Integer) result[0];
       Date date = (Date) result[1];
       String notes = (String) result[2];
    }
[注:提供的示例代码未经编译,请进行相应更改]


编辑:或者,如果所选字段与实体中的字段名称相同,则可以尝试

session.createSQLQuery(“从RunContainer中选择id、日期、注释”).addEntity(RunContainer.class)


有关更多详细信息,请参阅

有时候最简单的方法并不是显而易见的:)谢谢你的简洁和直截了当answer@DeirdraStrangio不客气。也可以参考编辑部分,可能有帮助。
List containerResults = query.List(); 

    for(Object[] result : containerResults) 
    {
       Integer id = (Integer) result[0];
       Date date = (Date) result[1];
       String notes = (String) result[2];
    }