我有一个表客户端,并且通过这种方式检索结果
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块来处理这个问题。但是想知道我是否可以抛出任何异常。我的意思是我是否更改了查询或者我应该怎么做返回,以便即使表为空也不会抛出异常
答案 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;
}