2014-02-17 2 views
1

У меня есть строитель критериев, который определяется как возвращающий длинный. Если набор результатов пуст, все приложение завершается с ошибкой. Как мне обработать это, чтобы вернуть заданное число, например. 1000?Hibernate/JPA обработка пустой набор результатов

Long yesterday = new Long(0); 

CriteriaBuilder cb = em.getCriteriaBuilder(); 
CriteriaQuery<Long> q = cb.createQuery(Long.class); 
Root<CustomerHistory> hist = q.from(CustomerHistory.class); 

q.multiselect(hist.get("total")); 
Date yesterDate = new LocalDate().minusDays(1).toDateTimeAtStartOfDay().toDate(); 

Predicate w1 = cb.equal(hist.<Date>get("date"), yesterDate); 
Predicate w2 = cb.equal(hist.get("customer"), customer); 
q.where(w1,w2); 

yesterday = em.createQuery(q).getSingleResult(); 


return yesterday < tot; 
+1

Поймай свои исключения, в этом случае вам нужно поймать 'NoResultException': HTTP: // документы. oracle.com/javaee/5/api/javax/persistence/NoResultException.html – Durandal

+0

А, это будет иметь смысл! Я узнаю один день! – ESP

ответ

2

Если есть пустой набор результатов, то Query.getSingleResult()javax.persistence.NoResultException бросает, который является RuntimeException. Вы можете поймать его в блоке try-catch и обработать его оттуда.

Чтобы установить максимальный размер набора результатов, вызовите Query.setMaximumResults(int maxResult) и вызовите getResultList() (который возвращает List желаемого объекта).

1

С JPA API

java.lang.Object getSingleResult() 
Execute a SELECT query that returns a single untyped result. 
Returns: 
    the result 
Throws: 
    NoResultException - if there is no result 
    NonUniqueResultException - if more than one result 

Рассмотрим поймать исключение из NoResultException и продолжить с логикой

Смежные вопросы