2017-10-26 1 views
0

이 반환 목록에있는 각 개체의 이름을 가져오고 싶지만 출력은 Object []의 배열이며이 엔터티를 표시합니다 .Categoryoria [id = 1] in 내 JComboBox 컨트롤.TypedQuery로 JComboBox 채우기 <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; 
    } 
} 

주 : 이것은 내 코드 나는이

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

는'목록 결과'처럼 얻을 results'됩니다 = consultarCategorias()'? 실제 오류 란 무엇이며 어디에서 볼 수 있습니까? List 을 선언 한 컨텍스트에서 코드의 일부를 붙여 넣을 수 있습니까? – 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의 시도하고 변환에 ArrayConvert list to array in Java

0

다음과 같이 전송할 수 있습니까?

,210
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.name = result [1];', 결과는'id = result [0];이어야합니다. 그러나 OP에는 이름이 필요하다고 가정합니다. –

관련 문제