我在我的项目中使用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 documnent说NoResultException
如果没有记录,但在我的控制台中我得到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)
所以大家请告诉我,如果没有记录,我应该抓住哪个例外
答案 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;
}