2012-05-25 2 views
3

java로 프로그램을 작성하여 공급자에게 한 모든 주문을 반환해야합니다. 주문의 ID를 표시하는 대신 [email protected]을 표시합니다. 여기서 sakila.entity는 Order.java 및 Order.hbm.xml을 포함하는 패키지입니다. 문제는 displayResult() 메서드에 있다고 생각합니다. 어쩌면 누군가가 알아낼 수 있습니다. 감사합니다.프로그램에서 객체의 원하는 문자열 표현을 표시하지 않습니다.

package sakila.ui; 

import java.util.Iterator; 
import java.util.List; 
import java.util.Set; 
import java.util.Vector; 
import javax.swing.table.DefaultTableModel; 
import org.hibernate.HibernateException; 
import org.hibernate.Session; 
import sakila.entity.Comanda; 
import sakila.entity.Furnizor; 
import sakila.util.HibernateUtil; 


public class SearchOrders extends javax.swing.JFrame { 

public SearchOrders() { 
    initComponents(); 
} 


private void queryButton1ActionPerformed(java.awt.event.ActionEvent evt) {            
    //if (!idProviderTextField.getText().trim().equals("")) 
      runQueryBasedOnIdFurnizor(); 
}            

private void runQueryBasedOnIdProvider(){ 
    executeHQLQuery("from Provider c where c.idprovider like '" + idProvider.getText() + "%'"); 

} 

private void executeHQLQuery(String hql){ 
    try{ 
    Session session = HibernateUtil.getSessionFactory().openSession(); 
    session.beginTransaction(); 
    org.hibernate.Query q = session.createQuery(hql); 
    List resultList = q.list(); 
    displayResult(resultList); 
    session.getTransaction().commit(); 
    }catch (HibernateException he){ 
     he.printStackTrace(); 
    } 
} 

    private void displayResult(List resultList){ 
    Vector<String> tableHeaders = new Vector<String>(); 
    Vector tableData = new Vector(); 
    tableHeaders.add("IdOrder"); 

    for (Object o : resultList){ 
     Provider p = (Provider) o; 

     Set<Order> c = p.getOrder(); 
     Iterator it = c.iterator(); 
     while (it.hasNext()) { 
      Object element = it.next(); 
      System.out.println(element); 
      Vector <Object> oneRow = new Vector <Object>(); 
      oneRow.add(element); 

     tableData.add(oneRow); 
     } 
    } 
    resultTable1.setModel(new DefaultTableModel(tableData, tableHeaders)); 
} 


public static void main(String args[]) { 
     public void run() { 
      new SearchOrders().setVisible(true); 
     } 
    }); 
} 
// Variables declaration - do not modify      
private javax.swing.JTextField idProviderTextField; 
private javax.swing.JLabel jLabel1; 
private javax.swing.JLabel jLabel2; 
private javax.swing.JPanel jPanel1; 
private javax.swing.JScrollPane jScrollPane1; 
private javax.swing.JButton queryButton1; 
private javax.swing.JTable resultTable1; 
// End of variables declaration     

} 여기

클래스는 오후 10시 19분 40초 Hibernate에 의해
package sakila.entity; 

Order.java

// 2012년 4월 9일을 생성됩니다 여기에

프로그램입니다 도구 3.2.1.GA

import java.util.HashSet; import java.util.Set;

공용 클래스 주문 지금 System.out.println(element); 라인이 바로 Order 개체의 일부 내부 코드를 인쇄 기본 toString() 방법을 사용 java.io.Serializable을 {

private int idorder; 
private Client client; 
private Depozit warehouse; 
private Furnizor provider; 
private Integer idproduct; 
private Integer unitmas; 
private Integer quantity; 
private Set comdetals = new HashSet(0); 
private Set facturas = new HashSet(0); 

public Order() { 
} 


public Order(int idorder) { 
    this.idorder = idorder; 
} 
public Order(int idorder, Client client, Warehouse warehouse, Provider provider, Integer idproduct, Integer unitmas, Integer quantity, Set comdetals, Set facturas) { 
    this.idorder = idorder; 
    this.client = client; 
    this.warehouse = warehouse; 
    this.provider = provider; 
    this.idproduct = idproduct; 
    this.unitmas = unitmas; 
    this.quantity = quantity; 
    this.comdetals = comdetals; 
    this.facturas = facturas; 
} 

public int getIdorder() { 
    return this.idorder; 
} 

public void setIdorder(int idorder) { 
    this.idorder = idorder; 
} 
public Client getClient() { 
    return this.client; 
} 

public void setClient(Client client) { 
    this.client = client; 
} 
public Warehouse getWarehouse() { 
    return this.warehouse; 
} 

public void setWarehouse(Warehouse warehouse) { 
    this.warehouse = warehouse; 
} 
public Provider getProvider() { 
    return this.provider; 
} 

public void setProvider(Provider provider) { 
    this.provider = provider; 
} 
public Integer getIdproduct() { 
    return this.idproduct; 
} 

public void setIdproduct(Integer idproduct) { 
    this.idproduct = idproduct; 
} 
public Integer getUnitmas() { 
    return this.unitmas; 
} 

public void setUnitmas(Integer unitmas) { 
    this.unitmas = unitmas; 
} 
public Integer getQuantity() { 
    return this.quantity; 
} 

public void setQuantity(Integer quantity){ 
    this.quantity = quantity; 
} 
public Set getComdetals() { 
    return this.comdetals; 
} 

public void setComdetals(Set comdetals) { 
    this.comdetals = comdetals; 
} 
public Set getFacturas() { 
    return this.facturas; 
} 

public void setFacturas(Set facturas) { 
    this.facturas = facturas; 
} 

}

+0

Order.java에 대한 코드를 게시 할 수 있습니까? (제 대답으로 도움이되지 않는 경우)? – matt

+0

오브젝트의 디폴트의 toString() 표현은, 오브젝트의 완전 수식 클래스 명, @ 다음에 오브젝트의 hashCode가 뒤 따른다. 그래서 여러분이 보게되는 것은 여러분이 객체의 클래스에 적절한 public String toString() 메소드를주지 않으면 객체가 표시하고자하는 정보를 보여주는 String을 반환하지 않는 한 여러분이보아야하는 것입니다. 그의 정확하고 간결한 대답은 @matt에 1+입니다. –

+0

@matt 당신은 어떻게 id를 표시하고 해시 코드가 아닌지 보려면 toString() 메서드를 사용할 수있는 아이디어가 있습니까? 시간이있을 때 나를 도울 수 있습니다. 감사! – alin

답변

12

을 구현합니다.

귀하의 Order 클래스는 주문 ID를 인쇄하려면 toString() 메서드를 재정의해야합니다.

아니면 아마 읽을 수 있도록 반복자 코드를 변경하는 것이 더 나은 것 :

Iterator<Order> it = c.iterator(); 
while (it.hasNext()) { 
    Order element = it.next(); 
    System.out.println(element.getIdorder()); 

당신은 단지이 하나의 사건에 대한 toString() 방법을 작성하지 않아도 그런 식으로. 일반적으로 toString()을 덮어 쓰면 전체 객체의 텍스트 표현을 출력하고 싶습니다. http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Object.html#toString%28%29

+0

@matt에게 조언 해 주셔서 감사합니다. 내 예제에서 toString() 메서드를 사용하는 방법을 보여 주시면 감사하겠습니다. 나는 Order.java도 올렸다. – alin

+0

더 많은 정보와 더 좋은 방법으로 편집되었습니다. – matt

관련 문제