Hibernate查询输出不带';不存在
我有一个Hibernate查询:Hibernate查询输出不带';不存在,hibernate,hibernate-mapping,hibernate-annotations,Hibernate,Hibernate Mapping,Hibernate Annotations,我有一个Hibernate查询: StringBuilder sb = new StringBuilder("" + "SELECT d.value " + "FROM Table d " + "WHERE d.date = :date "); Query q = em.createQuery(sb.toString()) .setParameter(
StringBuilder sb = new StringBuilder("" +
"SELECT d.value " +
"FROM Table d " +
"WHERE d.date = :date ");
Query q = em.createQuery(sb.toString())
.setParameter("date",date);
BigDecimal result = (BigDecimal) q.getSingleResult();
if (result == null)
result = BigDecimal.ZERO;
return result;
当我传递表中存在的日期时,它工作正常,但当我传递不存在的日期时,它返回一个异常
javax.persistence.NoResultException:未找到用于查询的实体
我试图将@NotFound(action=NotFoundAction.IGNORE)
注释放在表
的每个字段下,但例外情况是相同的。如何处理此问题?单一结果在没有结果时引发异常,您可以捕获该异常,然后返回null,也可以是q.getResultList(),然后检查列表,这样您可以查看是否也存在ar重复,如果单一结果引发另一个异常
从javadoc:
Throws:
NoResultException - if there is no result
NonUniqueResultException - if more than one result
处理异常的方式如下:
Query q = em.createQuery(sb.toString())
.setParameter("date",date);
try {
BigDecimal result = (BigDecimal) q.getSingleResult();
return result;
} catch (NoResultException e){
return BigDecimal.ZERO;
}
}
当没有结果时,single result会引发异常,您可以捕获该异常,然后返回null,也可以是q.getResultList(),然后检查列表,这样您就可以查看是否也存在ar重复项,在这种情况下,single result会引发另一个异常
从javadoc:
Throws:
NoResultException - if there is no result
NonUniqueResultException - if more than one result
处理异常的方式如下:
Query q = em.createQuery(sb.toString())
.setParameter("date",date);
try {
BigDecimal result = (BigDecimal) q.getSingleResult();
return result;
} catch (NoResultException e){
return BigDecimal.ZERO;
}
}
我认为你的询问没有任何问题。这就是Query.getSingleResult()方法的行为。正如Radu Toader所建议的,您可以使用Query.getResultList()或另一种处理方法,即将其包装在try-catch块中
BigDecimal result = null;
try{
result = (BigDecimal) q.getSingleResult();
} catch(NoResultException e) {
//log exception or throw it...
}
return result;
我认为你的询问没有任何问题。这就是Query.getSingleResult()方法的行为。正如Radu Toader所建议的,您可以使用Query.getResultList()或另一种处理方法,即将其包装在try-catch块中
BigDecimal result = null;
try{
result = (BigDecimal) q.getSingleResult();
} catch(NoResultException e) {
//log exception or throw it...
}
return result;
表中没有重复项,我有两个条目。难道不可能在地图中处理它吗?你想在地图中处理结果吗?我的意思是应该有一些像@NotFound这样的注释来处理类似的情况。没有,你只需要处理例外情况。没有重复项,表中有两个条目。难道不可能在映射中处理它吗?你想在映射中处理结果吗?我的意思是应该有一些像@NotFound这样的注释来处理类似的情况没有,你只需要处理例外以这种方式使用的stringbuilder是完全无用的,你在stringbuilder构造函数中连接字符串..我知道,我将在以后添加一些新paarmeters时使用它。以这种方式使用的stringbuilder是完全无用的,您正在stringbuilder构造函数中连接字符串。我知道,我将在以后添加一些新paarmeters时使用它