使用 TypedQuery<Entity> 填充 JComboBox 未正确显示实体名称

Populating JComboBox with TypedQuery<Entity> does not show Entitys name correct

我想获取此 return 列表中每个对象的名称,但输出是一个 Object[] 数组,并且在我的 JComboBox 控件中显示 entitys.Categoria[id=1] .

这个我不明白。请帮我!这是我的代码:

public List<Categoria> consultarCategorias() {
    try {            
        TypedQuery<Categoria> q = 
                em.createQuery("select c from Categoria c", Categoria.class);
            List<Categoria> results = q.getResultList();            
            return results;
    } catch (Exception e) {
        return null;
    }
}

注:我用这个

for (Categoria c : results) {
   System.out.println(c.getName());
}    

无效,此显示结果无法转换为类别

这是填充我的 JComboBox 的代码:

public void fillCmbCategorias() {
   cmbCategoria.removeAllItems();
   try {
      Object[] listaCategorias = crud.consultarCategorias().toArray();
      DefaultComboBoxModel dcb = new DefaultComboBoxModel(listaCategorias);
      cmbCategoria.setModel(dcb);
   } catch (Exception e) {
      JOptionPane.showMessageDialog(null
              ,"No se pudo cargar la lista de categorias. " + e.getMessage());
   }
}

你能试试这样投射吗:

List<Categoria> results = (List<Categoria>)q.getResultList();  `

我能想到的唯一原因是您已将 result 声明为某种超类型列表,例如 List<?>List<Object>.

假设您可以将 consultarCategorias() 的 return 值赋给它。

当然你不应该这样做——你应该更正列表通用类型——但这可能会奏效:

for (Object c : results) {
   System.out.println(((Categoria)c).getName());
}

更新(添加问题代码后):

您的问题似乎是这样的:

Object[] listaCategorias = crud.consultarCategorias().toArray();

正如我所怀疑的那样。

尝试

Categoria[] listaCategorias =
   crud.consultarCategorias().toArray(new Categoria[]{});
// toArray() needs some array instance to determine the type

关于 Lists 和转换为 Arrays 在此处查看更多信息 Convert list to array in Java