码迷,mamicode.com
首页 > 编程语言 > 详细

javax.persistence.NoResultException: No entity found for query

时间:2014-09-18 09:54:14      阅读:155      评论:0      收藏:0      [点我收藏+]

标签:jpa


先看这个查询:

    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<FcLatestSumSupplier> rs = entityManager.createQuery(jpql, FcLatestSumSupplier.class).setParameter("account", account).getResultList();
        if (rs.size() > 0) {
            return rs.get(0);
        } else {
            return null;
        }
    }


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


本文出自 “熔 岩” 博客,请务必保留此出处http://lavasoft.blog.51cto.com/62575/1554587

javax.persistence.NoResultException: No entity found for query

标签:jpa

原文地址:http://lavasoft.blog.51cto.com/62575/1554587

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!