我喜欢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上。我不得不捕获异常,这会在某种程度上降低性能。
我想知道这是否是最佳解决方案?或者有没有更好的解决方案,而不需要try-catch?
如果不可能(因为NoResultException已在JPA中定义),是否有任何“模板化”此类工作流程的快捷方式?
谢谢。
getSingleResult
。 "没有结果" 不是异常情况,为此抛出异常是不合适的。 - T.J. Crowdernull
表示没有结果。然而,对于有多个实际结果的情况,仍然可能出现异常。 - Marko Topolnik