不存在的行的 Hibernate 查询输出

Hibernate query output for rows that don't exist

我有一个 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;

当我传递 Table 中存在的日期时它工作正常,但是当我传递不存在的日期时它 returns 一个异常 javax.persistence.NoResultException: No entity found for query

我尝试在Table的每个字段下添加@NotFound(action = NotFoundAction.IGNORE)注解,但Exception是一样的。我该如何处理这个问题?

single result 没有结果时抛出异常,你可以捕获那个异常然后return 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;
  }
}

我认为您的查询没有任何问题。这就是 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;