2017-10-26 4 views
0

この戻り値リスト内の各オブジェクトの名前を取得したいが、出力はObject []の配列で、このshow entitiess.Categoryoria [id = 1] in私のJComboBoxコントロール。JComboBoxにTypedQueryを設定する<Entity>はエンティティ名が正しく表示されない

これはわかりません。私を助けてください!これは私のコードです:

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; 
    } 
} 

注:私は、これは結果がこれは私のJComboBoxのを埋めるためのコードであるCategoria

に変換することはできません示し、この

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

なく仕事を使用します。

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()); 
    } 
} 
+0

は '一覧結果'ようにして得られたresults'さ= consultarCategorias() '?実際のエラーとは何ですか?それはどこに表示されますか?リストを宣言したコンテキストからコードの一部を貼り付けることはできますか? – pirho

+0

'consultarCategorias()'と 'q.getResultList();'を実行すると実際にエラーが発生しますか? – pirho

+0

はい、オブジェクトとして取得した結果:JFrameからそのメソッドを呼び出します。これはJComboBoxを満たすコードです。 –

答えて

0

唯一の理由は、私はあなたがList<?>またはList<Object>のように、いくつかのスーパータイプのリストとしてresultを宣言したことを想像することができます。

戻り値をconsultarCategorias()にすることができます。

そしてもちろん、あなたは、このようにそれを行うべきではありません - あなたは、リストジェネリック型を修正する必要があります - しかし、これは、うまくいくかもしれない:

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 

についてList Sを試してみて、変換にArray sがConvert list to array in Java

0

このようなキャストを試すことができますか:

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

はもしかして、ここで詳細を参照してください。

だから、
public List<String> consultarCategorias() { 
     // ^^-------------------return a list of Strings 
    try { 
     TypedQuery<Categoria> q = em.createQuery("select c.name from Categoria c"); 
     //--------------------get only the names--------^^ 
     List<String> listName = q.getResultList(); 
     // ^^-------------------------------------List of names(Strings) 
     return results; 
    } catch (Exception e) { 
     return null; 
    } 
} 
+0

これは 'name'で十分です。しかし、通常は他のものへの参照が必要ですが、少なくともエンティティ 'id'がかなり頻繁に必要です。 – pirho

+0

はい@pirho good pointこの場合、結果は 'List 'でなければなりません。そのため、クエリが '' c.idを選択すると、c。結果は 'id = result [0]; name = result [1];'でなければなりませんが、私はOPに名前が必要であると仮定します –

関連する問題