我编写了这段代码,将jTable设置为一个模型,以适应从我的查询返回的数据。我不确定为什么会这样,但我确实有一个使用相同代码的例子,它完美地工作。 注意:查询从链接到另一个表的表中调用记录。 注意:有些人可能会说这是一个重复的问题,但我觉得不是因为我看到了这个问题并且没有解决方案帮助了我,我尝试使用迭代器而是发生了同样的错误。 任何建议。
这是代码
public void createModelsAndEquipmentTableModel(){
Query query = FinancialDBPUEntityManager.createQuery("SELECT t FROM Stocktbl t WHERE t.chemical = FALSE");
List<Object[]> results = query.getResultList();
String headings[] = {"Product ID", "Product Name", "Number In Stock", "Number Needs Replacing"};
Object data[][] = new Object[results.size()][headings.length];
int index = 0;
for(Object[] obj: results){// error occurs here.
data[index++] = obj;
}
DefaultTableModel model = new DefaultTableModel(data, headings);
tblquipment.setModel(model);
}
这是堆栈跟踪的相关部分:
Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: GUIPac.Stocktbl cannot be cast to [Ljava.lang.Object;
at GUIPac.ViewStockInfo.createChemicalsTableModel(ViewStockInfo.java:53)
at GUIPac.ViewStockInfo.<init>(ViewStockInfo.java:30)
答案 0 :(得分:4)
查询"SELECT t FROM Stocktbl t WHERE t.chemical = FALSE"
将返回Stocktbl
个对象。
迭代ResultList时会导致ClassCastExceptions。
我建议使用这个createQuery-Method:
TypedQuery<Stocktbl> query = FinancialDBPUEntityManager.createQuery("SELECT t FROM Stocktbl t WHERE t.chemical = FALSE", Stocktbl.class);
然后解决所有编译器警告和错误。
如果需要对象阵列,则在使用JPA时必须手动生成对象阵列。这是一个用于创建这些对象数组的伪代码:
for(Stocktbl stock : results){// no error occurs here anymore.
Object[] obj = new Object[] {stock.ProductId, stock.ProductName, stock.NumberInStock, stock.numberNeedsReplacing};
data[index++] = obj;
}
请更改Stocktbl stock
的字段名称以适合您的Stocktbl
类
答案 1 :(得分:2)
getResultList()
- 方法返回List<Stocktbl>
而不是Object[]
的列表。
在运行时没有通用。但是当你迭代它时,演员会失败。