Мне нравится семантика Java8. Я использую много таких кодов в своих DAO:
public Optional<User> findBy(String username) {
try {
return Optional.of(
emp.get().createQuery("select u from User u where u.username = :username" , User.class)
.setParameter("username" , username)
.setMaxResults(1)
.getSingleResult()
);
} catch (NoResultException e) {
return Optional.empty();
}
}
Он работает хорошо, но такой код (try catch NoResultException) рассеивается по моим DAO. И я должен поймать Exception, что как-то снижает производительность.
Интересно, это лучшее решение? или какое-либо лучшее решение, без пробной попытки?
Если это невозможно (поскольку NoResultException определено в JPA), любой ярлык для "templatize" такого рабочего процесса?
Спасибо.