先看这个查询:

    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,这个更符合常理。否则取第一条。


为了处理此问题,通常写法如下:

    public FcLatestSumSupplier findByAccount(String account) {
        String jpql = " select a from FcLatestSumSupplier a where a.account = :account";
        List rs = entityManager.createQuery(jpql, FcLatestSumSupplier.class).setParameter("account", account).getResultList();
        if (rs.size() > 0) {
            return rs.get(0);
        } else {
            return null;
        }
    }


先判断结果集大小,根据结果集大小再确定是返回null还是取第一条,这样显然更合理,不知道getSingleResult()方法的实现怎么会这样。