2014-07-25 129 views
0

我有一個表的客戶端,並從檢索結果我用這種方式如何處理JPA實體

public ClientParent getClient(Long clientId,Long parentId){ 
     String queryString="SELECT cp FROM Client cp where cp.cid.id=:clientId " + 
       "and cp.pid.id=:parentId ";   
     Query query=entityManagerUtil.getQuery(queryString); 
     query.setParameter("clientId", clientId); 
     query.setParameter("parentId", parentId); 
     return (ClientParent)query.getSingleResult(); 
    } 

這是DAO方法。

其實在第一個控制讓客戶進入到控制器類再到服務,然後DAO類

現在讓我們說客戶端表是空的,所以在這種情況下return (ClientParent)query.getSingleResult();將拋出我的錯誤。

我可以通過在服務類以及控制器類的try catch塊中處理這個問題。但想知道如果我可以做出來拋出任何異常。我的意思是我有改變查詢或應該怎麼做我返回,以便它不會拋出異常,即使表是空

回答

2

可以使用getResultList()方法

public ClientParent getClient(Long clientId,Long parentId){ 
     String queryString="SELECT cp FROM Client cp where cp.cid.id=:clientId " + 
       "and cp.pid.id=:parentId ";   
     Query query=entityManagerUtil.getQuery(queryString); 
     query.setParameter("clientId", clientId); 
     query.setParameter("parentId", parentId); 
     List<ClientParent> result = query.getResultList(); 
     if (result != null && result.size() >0){ 
      return result.get(0); 
     } else { 
      return null; 
     } 
    } 
+0

所以如果表不能爲空,然後它會返回null.I主叫ClientParent的服務類'ClientParent CP = clientDaoImpl.getClientParent(的clientId,parentId的)所述的方法; \t \t cp.setDeleted(true); \t \t entityManagerUtil.update(cp);'所以cp對於空表是如此的,所以在服務類中也會拋出錯誤 – rocking

+0

如果你沒有找到對象,你會怎麼做?你會創建一個新的?你可以在你的服務中使用'if(cp!= null)'。 – Jens

+0

也result.size()返回int所以我們可以做result.size()!= null – rocking

0

我建議你用try-catch塊環繞你的代碼。所以一定要確保數據是正確的。

try { 
    // ... your code goes here 
    // getSingleResult() 
    return XXX; 
} catch(NonUniqueResultException e) { 
    // here you know there is some bad data 
    // so you can ignore it or do something 
} catch(NoResultException e){ 
    return null; 
} 
+0

ohh是我在我所有的方法中都有這個try -catch塊 – rocking