2017-05-22 12 views
0

누군가가 나를 도와 줄 수 있기를 바랍니다.다른 POJO의 arraylist가 들어있는 POJO에 대한 결과 세트

public class Invoice{ 

private String docNum; 
private String customer; 
private ArrayList<InvoiceDetails> invoiceDetails; 

/* Getters and setters*/ 
} 

그리고이 같은 결과 집합에서 뽀조 Invoice을 채울 수있는 가장 좋은 방법이 알고 싶습니다 무엇 다음

public class InvoiceDetails{ 

private String taxRate; 
private Double taxAmount; 
private Double amount; 

/* Getters and setters*/ 
} 

또 다른 POJO : 나는 다음과 같은 구조의 POJO를 가지고 :

String sql= "SELECT InvoiceNumber, Customer, TaxRate, TaxAmount,Amount FROM TAX_VIEW WHERE Date=?" 
PreparedStatement pst = cn.prepareStatement(Config.SQL_FACTURAS, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); 
    pst.setDate(1, date); 
    ResultSet rs = pst.executeQuery(); 

같은 송장에 대해 여러 레코드를 반환 할 수 있습니다 ResultSet을 Asuming입니다 그것을 추적 할 수없는 가망 잠깐의 필요없이 한번에 그것을 할 일기 반복? 고마워요

+0

테이블 구조는 무엇입니까? 내 머리 꼭대기에서, 당신은 여기에 참여해야합니다. –

+0

원본 SQL Server에서보기입니다. 원래 테이블이 참으로 결합되었습니다. – pburgov

답변

1

보기에는 이미 참여한 것으로 보입니다. Invoice.docNum은 InvoiceNumber와 같다고 가정합니다. (다른 이름이있는 이유는 무엇입니까?) 따라서 "ORDER BY InvoiceNumber"를 선택 항목에 추가하고 처리 루프에서 변경 내용을 확인해야합니다. 코드는 의사가 아니며 테스트되지 않았습니다.

ResultSet rs = pst.executeQuery(); 
Invoice invoice=new Invoice(); 
while(rs.next()){ 
    if (invoice.getDocNum().compareTo(rs.getString(1))!=0) { 
     // This is a new Invoice, so process previous if not the first one 
     // and create a new instance 
     invoice=new Invoice(); 
     invoice.setDocNum(rs.getString(1)); 
     invoice.setCustomer(rs.getString(2)); 
     invoice.setInvoiceDetails(new ArrayList<InvoiceDetails>()); 
    } 
    InvoiceDetails invoiceDetails = new InvoiceDetails(); 
    invoiceDetails.setTaxRate(rs.getString(3)); 
    // ... further member settings, and finally add to list: 
    invoice.getInvoiceDetails.add(invoiceDetails); 
} 
// finally process the last Invoice if it is not empty 
+0

완벽한 !!! 이것은 내가 찾고 있었던 바로 그 것이다. 그것은 매력처럼 작동합니다. 대단히 감사합니다 !! – pburgov

+0

당신은 환영합니다. :-) – Galcoholic