我有一个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
中存在的日期时,它运行良好,但是当我传递不存在的日期时,它会返回异常
javax.persistence.NoResultException: No entity found for query
我试图在@NotFound(action = NotFoundAction.IGNORE)
的每个字段下添加Table
注释,但异常是相同的。我该如何处理这个问题?
答案 0 :(得分:3)
单个结果在没有结果时抛出异常,你可以捕获该异常然后返回null,q.getResultList(),然后检查列表,这样你就可以看到是否有重复,单个结果抛出另一个异常的情况。
来自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;
}
}
答案 1 :(得分:1)
我认为您的查询没有任何问题。这是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;