Java 强制转换一个包含不同类的对象
我正在尝试投射一个来自两个不同类的对象。 我从HQL查询中获取对象,如下所示: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
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
。然后它比我想象的要容易。现在它工作正常。谢谢!