2014-01-17 65 views
0

這是我製作的代碼。它不應該得到並進入NoResultException,但它不符合預期。有一個未使用的數據。我嘗試打印出來,這裏是輸出: 「[]」此代碼無法檢查NoResultException

private void deleteButtonActionPerformed(java.awt.event.ActionEvent evt) { 
    try {    
     int row = tableDataRangka.getSelectedRow(); 
     String idRangka = tableDataRangka.getValueAt(row, 0).toString(); 
     System.out.println(relasiRumahkayuRangkaDAO.getRelasiByIdRangka(idRangka).toString()); 
    } catch (NoResultException nre) { 
     // Doing something..   
    } catch (Exception ex) { 
     Logger.getLogger(MasterDataProjectUI.class.getName()).log(Level.SEVERE, null, ex); 
    } 
} 

這裏是方法的代碼 「getRelasiByIdRangka」:

public List<RelasiRumahKayuRangka> getRelasiByIdRangka(String idRangka) throws Exception{ 
    initEntityManager(); 
    List<RelasiRumahKayuRangka> rrDrs = new ArrayList<>(); 
    Query q = em.createNamedQuery("RelasiRumahKayuRangka.findByIdRangka"); 
    q.setParameter("idRangka", idRangka); 
    rrDrs.addAll(q.getResultList()); 
    closeEntityManager(); 
    return rrDrs; 
} 

而這一次是JPA查詢,findByIdRangka:

@NamedQuery(name = "RelasiRumahKayuRangka.findByIdRangka", query = "SELECT r FROM RelasiRumahKayuRangka r WHERE r.relasiRumahKayuRangkaPK.idRangka = :idRangka"), 

你們是否知道解決方案,所以可以通過NoResultException捕獲代碼?

+0

代碼「relasiRumahkayuRangkaDAO.getRelasiByIdRangka(idRangka)」應該被noResultException抓住。我用IDRangka填充了數據庫中未包含的數據。 – user3198020

+1

嘗試從某處拋出'noResultException',而不僅僅是'Exception'。就像現在這樣,這個例外並沒有被任何東西拋出。 – csmckelvey

+0

好吧,我會嘗試,除了它通常工作.. – user3198020

回答

0

在你的代碼中。如果結果集爲空,則列表也將爲空。 利用這種情況並拋出所需的異常。

在您的getRelasiByIdRangka(String idRangka)中添加以下更改。

public List<RelasiRumahKayuRangka> 
    getRelasiByIdRangka(String idRangka) throws Exception { 
    initEntityManager(); 
    // rest of the code here 
    // ... 

    // check if some results are found or not 
    if(rrDrs.isEmpty()) { // or (rrDrs.size() == 0) 
     throw new NoResultException("No results found"); 
    } // if empty 

    // this should be a filled in list 
    return rrDrs; 
} // end of method