我无法理解为什么我在最后一行代码中遇到了ClassCastException 我想如果我对OrgStructure列表进行了参数化 - 就没有问题了
List<MqtAsutrOrgst2> OrgStructure = null;
Query query = null;
...
...
OrgStructure = query.getResultList();
for (Object o : OrgStructure) {
MqtAsutrOrgst2 orgStructureItem = (MqtAsutrOrgst2) o;
}
P.S。 MqtAsutrOrgst2只是一个@Entity
答案 0 :(得分:2)
我无法理解为什么我在代码的最后一行有
的ClassCastException
据我所知,MqtAsutrOrgst2
是OrgStructureItemType
类的子类或实现类型。 List orgstructItems
被定义为保留OrgStructureItemType
子类型的任何内容,其中包括MqtAsutrOrgst2
以及可能还有其他一些子类,这些子类之间不能相互映射。
MqtAsutrOrgst2 orgStructureItem = (MqtAsutrOrgst2) o;
您强制编译器相信在运行时对象o
将是MqtAsutrOrgst2
的对象,但实际上它是OrgStructureItemType
的其他子类的对象,它不能投向MqtAsutrOrgst2
。
有更好的方法可以做到这一点,但你可以做一个临时修复:
if(o instanceof MqtAsutrOrgst2)
MqtAsutrOrgst2 orgStructureItem = (MqtAsutrOrgst2) o;
以下代码将快速失败:
for (MqtAsutrOrgst2 o : OrgStructure) { ... }
答案 1 :(得分:1)
只是尝试记录对象的类型,一切都应该清晰
答案 2 :(得分:0)
我认为MqtAsutrOrgst2是OrgStructure的子类。似乎你得到了使用JPA的OrgStructure列表。我们需要有关您使用的Query对象的更多信息。但是很可能你使用Query来构造超类OrgStructure的确切对象。
答案 3 :(得分:0)
所以最后问题是由于在MqtAsutrOrgst2类上映射的物化查询表中缺少其中一个字段造成的 thanx all