【发布时间】:2014-02-14 17:33:18
【问题描述】:
在尝试通过 JPA 从数据库中检索表并将其填充到 Table SWT 小部件 (org.eclipse.swt.widgets.Table) 时,我在执行以下 Java 代码时遇到转换错误:
EntityManager connection = DB.Connection().createEntityManager(); //the EntityManagerFactory
TypedQuery<Object[]> query = (TypedQuery<Object[]>) connection.createQuery("select t from Test t");
List<Object[]> tablelist = query.getResultList();
connection.close();
SWTtable.removeAll(); //clears all the elements in the table
for (Object[] row : tablelist) { //error on this line - java.lang.ClassCastException: {packagename}.Test cannot be cast to [Ljava.lang.Object;
final TableItem item = new TableItem(SWTtable, SWT.None);
item.setData(row[0]);
item.setText(0, row[1].toString());
}
如上所示,for (Object[] row : tablelist) { 这一行返回错误java.lang.ClassCastException: {packagename}.Test cannot be cast to [Ljava.lang.Object;
似乎在 foreach 循环中将 tablelist 转换为 List<Object[]> 时出错。我尝试了各种解决方案,但无法解决这个问题,因为我需要保留 Object[] 数组的选项,以便将所有行元素作为 SWT 表的项目供我使用。除了这行代码外,其他一切都很好。如果设置为for (Object row : tablelist),则没有数组。然后没有错误,但我丢失了数组,因此失去了将所有元素作为 SWT 表的项目供我使用的选项。
如果这是一种不好的方法并且您有其他建议,请说明。
注意:SQL 查询“从测试 t 中选择 t”只是测试代码。我将使用一个参数来指定我以后需要哪些记录,所以这里会有不止一个表。
【问题讨论】:
-
这是
List<Test>不是List<Object[]>。所以你需要修复List<Object[]> tablelist = query.getResultList();然后循环。 -
已经试过了,结果一样。
-
@JoeBarr 你是否也改变了改变上述内容的 foreach 循环?
-
是的,请阅读下面的 cmets,他们问同样的问题。只有没有数组的 Object 有效,Object[] 数组在运行时返回错误。
-
@JoeBarr:这就是错误消息所暗示的。但为了确定查询返回的内容,您可以在
connection.close();添加断点并检查变量tablelist。
标签: java arrays jpa swt runtime-error