2017-04-04 83 views
0

執行JUnit模擬測試時,此代碼失敗。方法定義中的異常(NoResultException,PersistenceException)與方法實際返回的異常(UnknownEntityException,ServiceException)不匹配。這只是一個明顯的錯誤?處理存儲庫層中的異常

項目異常(UnknownEntityException,ServiceException)被認爲是創建的,所以會有一種常見的方式來處理異常。原始代碼的創建者早已消失,我無法確定這是否是一個好主意。

@Repository 
public class InstitutionRepository { 

    @PersistenceContext 
    private EntityManager entityManager; 

    public EntityInstitutionModel findInstitutionByName(String instName) 
      throws NoResultException, PersistenceException {   
     try { 
      Query query = null; 
      query = entityManager.createQuery("SELECT ex from EntityInstitutionModel ex where ex.instname = :instName"); 
      query.setParameter("instName", instName); 

      EntityInstitutionModel instModel = (EntityInstitutionModel) query.getSingleResult(); 

      System.out.println("InstitutionRepository.findInstitutionByName.getId() = " + instModel.getId()); 

      return instModel; 

     }catch (NoResultException e) { 
      throw new UnknownEntityException(e); 
     } catch (Exception e) { 
      throw new ServiceException(e); 
     } 
    } 
} 

回答

0

這裏沒有錯誤;例外PersistenceExceptionNoResultException都是運行時異常,這意味着它們不需要聲明,因此,即使它們沒有被拋出,也會允許代碼進行編譯。

我的建議是從您的方法中刪除throws子句,因爲這隻會使您作爲維護者感到困惑和沮喪。

(另外,如果你能在年底做的東西catch Exception,那會是一件好事。不想去追趕的東西,你真的不應該在那兒)