我正在尝试转换来自两个不同类的对象。
我从这样的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%'


该对象来自Actors,Film和FilmActors。
当我尝试投射对象时出现问题:

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.filmsakila.entity.Actor等,该如何投射?

最佳答案

您需要从休眠的query.list()方法中更好地了解结果列表的类型是什么。

如果查询投影很简单,则这是List<Film>,其中Film是休眠实体:

select F from Film F

但就您而言,您的预测是

select S1, S2, S2

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

因此,输出列表的实际类型为List<Object[]>,因此会出现错误java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to sakila.entity.Film,您尝试将Object[]强制转换为Film,这是非法的。

关于java - 在内部转换具有不同类的对象,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48963447/

10-09 05:26