先看这个查询:
1
2
3
4
|
public
FcLatestSumDeliver findByAccount(String account) {
String jpql =
" select a from FcLatestSumDeliver a where a.account = :account"
;
return
entityManager.createQuery(jpql, FcLatestSumDeliver.
class
).setParameter(
"account"
, account).getSingleResult();
}
|
当一个jpql语句查询为了返回条记录的时候,会用到getSingleResult()方法,但是如果查询结果集大小为0,则会抛出异常。
javax.persistence.NoResultException: No entity found for query
因此,这个方法很鸡肋,通常我们期望在结果集为0的时候返回一个null,这个更符合常理。否则取第一条。
为了处理此问题,通常写法如下:
1
2
3
4
5
6
7
8
9
|
public
FcLatestSumSupplier findByAccount(String account) {
String jpql =
" select a from FcLatestSumSupplier a where a.account = :account"
;
List<FcLatestSumSupplier> rs = entityManager.createQuery(jpql, FcLatestSumSupplier.
class
).setParameter(
"account"
, account).getResultList();
if
(rs.size() >
0
) {
return
rs.get(
0
);
}
else
{
return
null
;
}
}
|
先判断结果集大小,根据结果集大小再确定是返回null还是取第一条,这样显然更合理,不知道getSingleResult()方法的实现怎么会这样。
本文转自 leizhimin 51CTO博客,原文链接:http://blog.51cto.com/lavasoft/1554587,如需转载请自行联系原作者