此代码无法检查NoResultException

时间:2014-01-17 02:55:35

标签: java mysql jpa netbeans

这是我制作的准则。它不应该获取并进入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捕获吗?

1 个答案:

答案 0 :(得分:0)

在你的代码中。如果结果集为空,则list也为空。 利用这种情况并抛出所需的异常。

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