先看这个查询:
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,则会抛出异常。
因此,这个方法很鸡肋,通常我们期望在结果集为0的时候返回一个null,这个更符合常理。否则取第一条。
为了处理此问题,通常写法如下:
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()方法的实现怎么会这样。
时间: 2024-10-27 16:53:33