如何处理jpa实体

时间:2014-07-25 05:42:36

标签: spring hibernate 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();会给我带来错误。

我可以通过在服务类和控制器类中尝试catch块来处理这个问题。但是想知道我是否可以抛出任何异常。我的意思是我是否更改了查询或者我应该怎么做返回,以便即使表为空也不会抛出异常

2 个答案:

答案 0 :(得分: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;
       }
    }

答案 1 :(得分: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;
}