我应该在 getSingleResult 中使用哪个异常

which exception should I use in getSingleResult

我在我的项目中使用 JPA

我的方法 returns id of a table 如下所示

public Object getID(Long id)
    {

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


    }

所以如果没有记录那么它会抛出一个错误,然后我会在 catch 块中写插入查询。

因为我只想在没有记录时插入,所以我很困惑应该捕获哪个异常。

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_JpaExceptionTranslatorAspecta1ac9(JpaExceptionTranslatorAspect.aj:15)

所以大佬们请告诉我如果没有记录我应该捕获哪个异常

创建exists方法并调用query的list方法:

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;
    }