JPA 的最佳实践与 Java8 的可选返回?
我喜欢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();
}
}
它工作得很好,但是这样的代码(尝试捕获NoResultException)分散在我的DAO上。而且我必须抓住 异常 ,这以某种方式降低了性能 。
我想知道它是否是最好的解决方案?或任何更好的解决方案,没有尝试捕获?
如果这是不可能的(因为NoResultException是在JPA中定义的),那么“模板化”这种工作流程的任何快捷方式?
谢谢。