我应该在getSingleResult中使用哪个例外

时间:2015-01-13 06:45:43

标签: java hibernate jpa

我在我的项目中使用JPA

我的方法返回一个表的id,如下所示

public Object getID(Long id)
    {

        String queryString="select id from test where testid= "+id;
        Query query = entityManagerUtil.entityManager.createNativeQuery(queryString);
        return query.getSingleResult();


    }

因此,如果没有记录,则会抛出错误,然后我将在catch块中编写插入查询。

因为我只想在没有recrds时插入所以我很困惑应该抓住哪个异常。

oracle documnentNoResultException如果没有记录,但在我的控制台中我得到EmptyResultDataAccessException

org.springframework.dao.EmptyResultDataAccessException: No entity found for query
    at org.springframework.orm.jpa.EntityManagerFactoryUtils.convertJpaAccessExceptionIfPossible(EntityManagerFactoryUtils.java:294)
    at org.springframework.orm.jpa.aspectj.JpaExceptionTranslatorAspect.ajc$afterThrowing$org_springframework_orm_jpa_aspectj_JpaExceptionTranslatorAspect$1$18a1ac9(JpaExceptionTranslatorAspect.aj:15)

所以大家请告诉我,如果没有记录,我应该抓住哪个例外

1 个答案:

答案 0 :(得分:0)

创建一个exists方法并调用query的列表方法:

public boolean exists(Long id)

{

    String queryString="select id from test where testid= "+id;
    Query query = entityManagerUtil.entityManager.createNativeQuery(queryString);
    if (query.list().size()>0){ 
       return true
    }

    return false
}

所以你不必捕捉异常。

更新:

您还可以将getId()函数与list操作一起使用:

public Object getID(Long id)
    {

        String queryString="select id from test where testid= "+id;
        Query query = entityManagerUtil.entityManager.createNativeQuery(queryString);
        List l =  query.list().size();
        if (l>0){ 
          return l.get(0)
        }
        return null;
    }