2014-07-25 79 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