当我不希望出现异常时,我遇到了一些麻烦。这是我的两门课:
public List<ErrorResponse> validate()
{
List<ErrorResponse> errors = new ArrayList<ErrorResponse>();
try
{
Users user = userManager.findByCompany(job.getCompanyId().getId());
}
catch (Exception e)
{
ErrorCodes err = ErrorCodes.CODE101;
errors.add(new ErrorResponse(err.getCode(), err.getMessage()));
}
}
public Users findByCompany(Integer companyId)
throws UserNotFoundException, UsernameNotProvidedException
{
if (username == null)
{
throw new UserUsernameNotProvidedException();
}
TypedQuery<Users> query = em.createNamedQuery("Users.findByCompany", Users.class);
query.setParameter("companyId", companyId);
try
{
Users result = query.getSingleResult();
return result;
}
catch (NoResultException e)
{
throw new UserNotFoundException();
}
catch (NonUniqueResultException e)
{
throw new UserNotFoundException();
}
catch (Exception e)
{
throw new UserNotFoundException();
}
}
好的 - 所以 validate() 方法调用 findByCompany() 方法(在另一个类中)。抛出的异常是 findByCompany() 方法中的运行时“NonResultException”(这是正确的)。然后用相同的方法捕获,并抛出我的应用程序异常“UserNotFoundException”。这现在应该传播到 validate() 方法,它应该在“catch(Exception e)”中被捕获。但是,validate() 中的“catch(Exception e)”反而捕获了“EJBTransactionRolledBackException”,这不是我想要的——如果没有找到结果,应用程序应该继续。
当然,通过捕获运行时异常并抛出我的应用程序异常(再次在 validate() 方法中捕获它),应该避免回滚吗?
提前致谢。