0

我不明白为什么我在最后一行代码中有 ClassCastException
我想如果我有 OrgStructure 列表参数化 - 就不会有问题

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

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

        MqtAsutrOrgst2 orgStructureItem = (MqtAsutrOrgst2) o;

    }

ps MqtAsutrOrgst2 只是一个@Entity

4

4 回答 4

2

我不明白为什么我在最后一行代码中有 ClassCastException

我的理解是MqtAsutrOrgst2类的子类或实现类型OrgStructureItemType。被List orgstructItems定义为保留任何属于其子类型的任何内容,OrgStructureItemType其中包括MqtAsutrOrgst2可能还有一些其他子类,这些子类不能在彼此之间强制转换。

MqtAsutrOrgst2 orgStructureItem = (MqtAsutrOrgst2) o;

您正在强迫编译器相信在运行时该对象o将是 的对象,但实际上它是不能强制转换MqtAsutrOrgst2为的某个其他子类的对象。OrgStructureItemTypeMqtAsutrOrgst2

有更好的方法可以做到这一点,但你可以做一个临时修复:

if(o instanceof MqtAsutrOrgst2)     
  MqtAsutrOrgst2 orgStructureItem = (MqtAsutrOrgst2) o;

下面的代码将很快失败:

for (MqtAsutrOrgst2 o : OrgStructure) { ... }
于 2013-07-17T07:27:44.797 回答
1

只需尝试记录对象的类型,一切都应该清楚

于 2013-07-17T07:24:50.383 回答
0

我想 MqtAsutrOrgst2 是 OrgStructure 的子类。似乎您使用 JPA 获得了 OrgStructure 列表。我们需要有关您使用的查询对象的更多信息。但很可能您使用的查询正是构造超类 OrgStructure 的对象。

于 2013-07-17T07:33:43.247 回答
0

所以最后的问题是由于缺少映射到 MqtAsutrOrgst2 类
thanx all的物化查询表中的字段之一

于 2013-07-19T14:28:33.323 回答