无法转换为 [Ljava.lang.Object;

Cannot be cast to [Ljava.lang.Object;

我编写这段代码是为了将 jTable 设置为适合从我的查询返回的数据的模型。我不确定为什么会发生这种情况,但我确实有一个使用相同代码的示例并且它运行良好。 注意:查询从链接到另一个 table 的 table 调用记录。 注意:有人可能会说这是一个重复的问题,但我觉得不是,因为我查看了那个问题并且没有解决方案帮助我,我尝试使用迭代器来代替,但发生了同样的错误。 任何建议。

这是代码

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)

getResultList()- 方法返回 List<Stocktbl> 而不是 Object[] 的列表。

在运行时没有泛型。但是当你迭代它时,转换失败。

查询 "SELECT t FROM Stocktbl t WHERE t.chemical = FALSE" 将 return 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 class