2012-10-10 152 views
0

这是一个从数据库中检索结果列表的功能。无法从列表中提取数据

public List<util> deep(){ 
    Query query = getEntityManager().createNativeQuery("SELECT state,max(pop2010) from uscensuspopulationdata where state <> 0 "); 
    List<util> l= query.getResultList(); 
    return l; 
} 

类UTIL:

public class util{ 
    int state; 
    int pop2010; 

    public util(int state, int pop2010) { 
     this.state = state; 
     this.pop2010 = pop2010; 
    } 

    @Override 
    public String toString() { 
     return "util{" + "state=" + state + ", pop2010=" + pop2010 + '}'; 
    } 
} 

当我尝试提取这样的价值观,我得到一个ClassCastException:

List<util> l = handle.deep(); 
for (util u : l) { 
    out.print(u); 
} 
+0

是否由类型的getResultList()返回的列表? –

+0

不能..返回类型列表 – user1736333

+0

的数据那么这就是你的问题。当你使用foreach循环时,它试图将列表中的对象转换为'util'类型的对象,这可能是不可能的。从源代码中找出列表的具体类型,然后使函数或工厂类从列表中获取元素并创建自己的元素。 –

回答

0

如果你想util对象的列表,你应该能够使用以下查询:

Query query = getEntityManager().createNativeQuery("SELECT new util(state,max(pop2010)) from uscensuspopulationdata where state <> 0 "); 
List<util> l = query.getResultList();  

你在哪里调用util的构造函数。这个用例被指定为here in the HQL docu

如果uscensuspopulationdata是一个映射实体也就不应该使用NativeQuery,但你可以只使用getEntityManager().createQuery(...)

最后,它被认为是一种良好的风格,在Java中大写一个类的第一个字母。