不存在的行的 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;
我有一个 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;