奇怪的类强制转换异常

时间:2013-07-17 07:20:31

标签: java jpa types classcastexception

我无法理解为什么我在最后一行代码中遇到了ClassCastException 我想如果我对OrgStructure列表进行了参数化 - 就没有问题了

List<MqtAsutrOrgst2> OrgStructure = null;
    Query query = null;
    ...
            ...

    OrgStructure = query.getResultList();       
    for (Object o : OrgStructure) {

        MqtAsutrOrgst2 orgStructureItem = (MqtAsutrOrgst2) o;

    }

P.S。 MqtAsutrOrgst2只是一个@Entity

4 个答案:

答案 0 :(得分:2)

  

我无法理解为什么我在代码的最后一行有

的ClassCastException

据我所知,MqtAsutrOrgst2OrgStructureItemType类的子类或实现类型。 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