我是java新手并使用netbeans探索java ee应用程序。
我有代码:
userbean中的方法:
public List userList() {
Query q = em.createNativeQuery("select username,address from tbuser");
Iterator i = q.getResultList.iterator;
ArrayList<UserState> userinfo = new ArrayList<UserState>();
while (i.hasNext()) {
Vector result = (Vector) i.next(); // <- HERE
UserState us = new UserState();
us.setName((String) result.get(0));
us.setAddress((String) result.get(1));
userinfo.add(us);
}
return userinfo;
}
我使用此方法构造jsf数据表并使用netbeans6.5和glassfish2
工作正常然而,当我使用相同的方法,除了我将矢量更改为netbean 6.9
中的arraylist和glassfish 3我得到了类演员
运行时的异常:对象无法强制转换为java.util.list;
有人知道怎么做吗?谢谢..
答案 0 :(得分:0)
我怀疑代码是这样的,hasNext()
等方法缺少括号。如果您复制了代码,请再次这样做,因为让我们猜测您的代码不会提高答案的质量。
您的问题是您想要从Vector访问元素。但Vector中对象的类型不是Vector
,而是不同类型的集合。你想要检索这个Vector的一个元素(这很好),但是你试着将它转换为Vector
,它失败了。
由于我无法在运行时看到Vector中将包含哪种类型的对象,因此,您可以在发生当前错误的行之前使用System.out.println(i.next().getClass().getCanonicalName());
。这将打印Vector元素的类型。
答案 1 :(得分:0)
嗯,更好的是直接在JPA查询中创建DTO:
public List userList() {
Query q = em.createNativeQuery("SELECT new UserState(username,address) FROM tbuser");
return q.getResultList();
}
像这样(这不是经过验证的代码)