2014-01-17 30 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