Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.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_Hql - Fatal编程技术网

Java 强制转换一个包含不同类的对象

Java 强制转换一个包含不同类的对象,java,hibernate,hql,Java,Hibernate,Hql,我正在尝试投射一个来自两个不同类的对象。 我从HQL查询中获取对象,如下所示: select F.title, F.length, F.specialFeatures from Film F left join F.filmActors X inner join X.actor A where A.firstName like 'E%' 对象从演员、电影和电影演员那里获得部分。 尝试投射对象时出现问题: Film fl = (Film) o; 并显示此错误: java.lang.Cl

我正在尝试投射一个来自两个不同类的对象。 我从HQL查询中获取对象,如下所示:

select F.title, F.length, F.specialFeatures 
from Film F 
left join F.filmActors X 
inner join X.actor A 
where A.firstName like 'E%'
对象从演员、电影和电影演员那里获得部分。 尝试投射对象时出现问题:

Film fl = (Film) o;
并显示此错误:

java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to sakila.entity.Film
at Formulario_AD04.mostrarResultados(Formulario_AD04.java:76)

如果对象来自
sakila.entity.film
sakila.entity.Actor
等,如何投射该对象?

您需要更好地了解hibernate query.list()方法的结果列表的类型

这是一个
列表
,其中
电影
是一个休眠实体,如果查询投影很简单,如:

从胶片F中选择F

但在你的情况下,你的预测是

选择S1、S2、S2

其中S1、S2和S3是三个标量(根据
consultaActor
中定义的查询)


因此,输出列表的实际类型是
list
,因此错误
java.lang.ClassCastException:[Ljava.lang.Object;无法投射到sakila.entity.Film
中,您尝试投射
对象[]
电影
,这是非法的。

如错误消息所示,这样的查询返回一个包含Object[]实例的列表(每个数组包含3个元素:标题、长度和特殊特征)。不是电影的实例。还要注意,与您声称的相反,这个查询只从电影中获取属性。不是从Actore获取属性。不是从FilmActors获取属性。如果我尝试另一个类似这样的查询:“从电影F,其中F.title像‘E%””我可以毫无问题地将对象投射到电影中,因此,如果第一个查询不包含演员或电影演员的一部分,为什么它不工作?感谢您的帮助,并对语法表示歉意……好吧,如果您的查询选择了电影,您就可以取回电影。如果它选择了3个值的元组,您就可以取回3个值的元组。这3个值的来源并不正确更改任何内容都是不相关的。重要的是您的select子句。
select f
不同于
select f.title,f.length
。然后它比我想象的要容易。现在它工作正常。谢谢!