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(

我有一个Hibernate查询:

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时使用它